Git 주니어 기술면접
새 면접Q. git add 명령어의 역할을 설명하고, git add . 와 git add -A 의 차이점을 말씀해주세요.
git add는 Working Directory의 변경사항을 Staging Area로 이동시키는 명령어입니다. git add .은 현재 디렉토리 이하의 모든 변경사항(수정, 새 파일)을 스테이징하지만, 상위 디렉토리의 삭제된 파일은 포함하지 않습니다. git add -A는 저장소 전체의 모든 변경사항(추가, 수정, 삭제)을 스테이징합니다. 실무에서는 의도하지 않은 파일이 포함될 수 있으므로, 특정 파일을 명시하거나 git status로 확인 후 스테이징하는 것이 안전합니다.
- • Staging Area로 변경사항 이동
- • git add .은 현재 디렉토리 기준
- • git add -A는 저장소 전체 모든 변경사항
- • 삭제된 파일 처리 차이
실수로 잘못된 파일을 git add 했을 때, Staging Area에서 제거하는 방법은 무엇인가요?
Q. git log 명령어의 유용한 옵션들을 3가지 이상 설명하고, 커밋 히스토리를 효과적으로 조회하는 방법을 말씀해주세요.
git log --oneline은 각 커밋을 한 줄로 요약해서 보여주어 전체 히스토리를 빠르게 파악할 수 있습니다. git log --graph는 브랜치와 머지 히스토리를 시각적으로 표현해줍니다. git log -n 5는 최근 5개의 커밋만 조회하며, git log --author='이름'으로 특정 작성자의 커밋만 필터링할 수 있습니다. git log --since='2 weeks ago'로 기간별 조회도 가능합니다. 실무에서는 git log --oneline --graph --all을 조합하여 전체 브랜치 구조를 한눈에 파악하는 경우가 많습니다.
- • --oneline으로 간결한 조회
- • --graph로 브랜치 시각화
- • -n으로 개수 제한
- • --author, --since로 필터링
- • 옵션 조합 활용
특정 파일의 변경 이력만 추적하고 싶을 때는 어떤 명령어를 사용하나요?
Q. Git Flow 브랜치 전략에서 main, develop, feature, release, hotfix 브랜치의 각 역할을 설명해주세요.
main 브랜치는 프로덕션 배포 가능한 안정적인 코드를 유지하며, 실제 배포되는 버전을 관리합니다. develop 브랜치는 다음 릴리즈를 위한 개발 통합 브랜치로, 기능 개발이 모이는 곳입니다. feature 브랜치는 develop에서 분기하여 새로운 기능을 개발하고, 완료 후 develop으로 머지됩니다. release 브랜치는 배포 준비를 위해 develop에서 분기하며, 버그 수정과 메타데이터 업데이트를 진행합니다. hotfix 브랜치는 main에서 분기하여 긴급한 프로덕션 버그를 수정하고, main과 develop 모두에 머지됩니다.
- • main은 프로덕션 코드
- • develop은 개발 통합
- • feature는 기능 개발
- • release는 배포 준비
- • hotfix는 긴급 수정
소규모 팀이나 간단한 프로젝트에서는 Git Flow가 과할 수 있는데, 이런 경우 어떤 브랜치 전략을 사용할 수 있나요?
Q. 좋은 커밋 메시지를 작성하는 원칙과 컨벤션을 설명하고, 실무에서 일반적으로 사용되는 커밋 메시지 형식을 예시와 함께 말씀해주세요.
좋은 커밋 메시지는 제목과 본문을 빈 줄로 구분하며, 제목은 50자 이내로 명령형으로 작성합니다. Conventional Commits 형식에서는 'feat: 로그인 기능 추가', 'fix: 회원가입 버그 수정', 'docs: README 업데이트'처럼 타입을 접두사로 붙입니다. 주요 타입으로는 feat(기능), fix(버그수정), docs(문서), style(포매팅), refactor(리팩토링), test(테스트), chore(빌드/설정) 등이 있습니다. 본문에는 '무엇을' 변경했는지보다 '왜' 변경했는지를 설명하는 것이 중요합니다.
- • 제목 50자 이내 명령형
- • 타입 접두사 사용
- • 제목과 본문 분리
- • '왜'를 설명
- • Conventional Commits 형식
여러 개의 논리적으로 독립적인 변경사항을 한 번에 작업했을 때, 커밋을 어떻게 나누는 것이 좋을까요?
Q. Git의 HEAD가 무엇인지 설명하고, detached HEAD 상태가 발생하는 경우와 이 상태에서 작업할 때 주의할 점을 말씀해주세요.
HEAD는 현재 체크아웃된 커밋을 가리키는 포인터로, 일반적으로 브랜치를 가리키며 브랜치가 다시 특정 커밋을 가리킵니다. detached HEAD 상태는 HEAD가 브랜치가 아닌 특정 커밋을 직접 가리킬 때 발생하며, git checkout <커밋해시>로 과거 커밋을 체크아웃할 때 나타납니다. 이 상태에서 커밋을 하면 어떤 브랜치에도 속하지 않아 나중에 찾기 어려울 수 있습니다. 작업을 유지하려면 git checkout -b <새브랜치명>으로 새 브랜치를 만들어야 합니다. 단순 조회 목적이라면 문제없지만, 변경사항을 만들 때는 반드시 브랜치를 생성해야 합니다.
- • HEAD는 현재 커밋 포인터
- • 보통 브랜치를 가리킴
- • 특정 커밋 체크아웃 시 detached 상태
- • 작업 유지하려면 브랜치 생성 필요
- • 조회만 할 때는 안전
git reflog는 무엇이며, detached HEAD 상태에서 작업한 커밋을 잃어버렸을 때 어떻게 복구할 수 있나요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!