본문으로 바로가기

모든 수준을 위한 Git 면접 질문과 답변 Top 25

기술 면접에서 자주 나오는 Git 명령, 개념, 비교 항목을 복습하세요
업데이트됨 2026년 6월 2일  · 13분 읽다

Git은 강력한 버전 관리 기능으로 잘 알려진 현대 개발자의 필수 도구입니다. 2005년 Linus Torvalds가 리눅스 커널 개발을 지원하기 위해 만든 이후, 전 세계 수많은 소프트웨어 프로젝트의 중추가 되었습니다. 프로젝트 버전 관리를 효율적이고 유연하게 수행하고, 협업을 강력히 지원하기 때문에 규모와 관계없이 모든 팀에 없어서는 안 될 도구입니다.

이 글은 초급부터 고급까지 아우르는 상위 20개의 Git 면접 질문을 다루어 기술 면접을 준비하는 데 도움을 드리기 위한 것입니다. Git을 처음 접하셨든, 이해를 더욱 심화하고 싶으시든, 아래 질문과 답변을 통해 역량을 보여 주고 면접에서 좋은 결과를 얻을 수 있습니다.

기초 Git 면접 질문

Git이 아직 낯선 분이라면, 기본 면접 질문은 초보 개념과 활용법을 다루는 경우가 많습니다. 복습이 필요하다면 DataCamp의 Introduction to Git 과정을 참고하세요.

Git 저장소란 무엇인가요?

Git 저장소는 프로젝트의 파일과 수정 이력을 보관하고, 시간에 따른 변경 사항을 추적하여 버전 관리를 가능하게 합니다. 내 장치의 폴더 같은 로컬 위치나 GitHub 같은 온라인 플랫폼에 위치할 수 있습니다. 이를 통해 사용자들은 협업하고, 이전 버전으로 되돌리며, commit, push, pull 같은 명령으로 프로젝트 개발을 효율적으로 관리할 수 있습니다.

Git은 어떻게 작동하나요?

Git은 프로젝트의 파일 및 디렉터리에 가해진 변경 사항을 기록하면서, 변화하는 상태의 스냅샷을 캡처합니다. 사용자는 변경 사항을 관리하고, 동시 개발을 위한 브랜치를 만들고, 브랜치를 병합하며, 필요할 경우 이전 상태로 되돌릴 수 있습니다. 또한 협업을 촉진하고 소프트웨어 개발에서 효과적인 버전 관리를 보장합니다.

git add란 무엇인가요?

git add 명령은 다음 커밋에 포함할 변경 사항을 스테이징하는 데 사용됩니다. 작업 디렉터리에서 파일에 가해진 수정, 추가, 삭제를 준비하여 다음 커밋 스냅샷에 포함되도록 표시합니다. 이 명령은 실제로 커밋을 수행하는 것이 아니라, 스테이징을 위한 준비 단계임을 유의하세요.

git push란 무엇인가요?

git push 명령은 로컬 저장소의 내용을 원격 저장소로 업로드하는 데 사용됩니다. 일반적으로 GitHub나 GitLab 같은 서버의 원격 저장소로 로컬에서 커밋된 변경 사항을 전송합니다. 이 명령은 동일한 프로젝트에서 다른 이들과 변경 사항을 공유할 수 있도록 하여 협업을 가능하게 합니다.

별도의 튜토리얼에서 Git push와 pull에 대해 더 알아보세요.

git status란 무엇인가요?

git status 명령은 저장소의 현재 상태를 표시합니다. 어떤 파일이 수정되었는지, 어떤 파일이 다음 커밋을 위해 스테이징되었는지, 어떤 파일이 추적되지 않는지 등의 정보를 제공합니다. 진행 상황을 파악하고 커밋 또는 스테이징이 필요한 변경 사항을 식별하는 데 유용합니다.

Git에서 커밋이란 무엇인가요?

커밋은 특정 시점에 저장소의 파일에 가해진 변경 사항의 스냅샷을 의미합니다. Git에서 변경 사항을 커밋하면 파일의 현재 상태를 저장하고, 변경 내용을 설명하는 메시지를 함께 남길 수 있습니다(권장됨).

각 커밋은 고유 식별자를 생성하여 저장소의 변경 이력을 추적할 수 있게 합니다. 커밋은 프로젝트의 이전 상태로 되돌리거나, 변경 이력을 검토하거나, 업데이트를 공유해 협업하는 등 버전 관리에서 핵심적인 역할을 합니다.

Git cheat sheet

면접 준비에 도움이 되는 DataCamp의 Git 치트 시트를 확인하세요

Git에서 브랜칭이란 무엇인가요?

브랜칭은 메인 개발 라인(일반적으로 main, 과거에는 master 브랜치라고 불림)에서 분기하여, 메인 코드베이스에 영향을 주지 않고 새로운 기능, 수정, 실험을 진행하는 관행을 말합니다. 이를 통해 하나의 저장소 안에서 여러 개의 개발 라인이 병행될 수 있습니다.

각 브랜치는 자체 커밋 집합을 가진 독립적인 개발 라인을 나타내며, 개발자들이 서로 다른 기능이나 수정을 동시에 작업할 수 있게 해 줍니다. 브랜칭은 협업, 실험, 프로젝트 구성에 유리하며, 하나의 브랜치에서 완료 및 테스트된 변경 사항을 메인 코드베이스로 다시 병합할 수 있습니다.

Git에서 충돌이란 무엇인가요?

충돌은 서로 다른 기여자가 파일의 동일한 부분에 상충되는 변경을 가했을 때 발생하며, 주로 병합(merge) 또는 리베이스(rebase) 과정에서 나타납니다. Git은 이러한 충돌을 자동으로 해결할 수 없으므로 사용자가 수동으로 불일치를 해결해야 합니다.

충돌을 해결하려면 영향을 받은 파일을 열면 됩니다. Git이 충돌 구간을 <<<<<<<, =======, >>>>>>> 표시로 표기합니다. 파일을 편집해 올바른 버전을 남기고 표시를 제거한 다음 다음을 수행하세요:

git add <resolved-file>
git commit
VS Code, IntelliJ 같은 도구와 git mergetool을 사용하면 과정을 시각적으로 확인하고 더 쉽게 진행할 수 있습니다.

Git에서 머지(merge)란 무엇인가요?

머지는 프로젝트의 서로 다른 브랜치에 걸친 변경 사항을 통합하고 협업을 촉진하는 Git의 기본 작업입니다. 즉, 서로 다른 브랜치의 변경 사항을 하나의 브랜치(일반적으로 master 또는 main)로 결합하는 과정입니다.

머지는 한 브랜치에서 이루어진 변경 사항을 다른 브랜치에 통합하여 두 브랜치의 이력을 결합하는 새로운 커밋을 생성합니다. 별도의 튜토리얼에서 Git에서 머지 충돌을 해결하는 방법을 더 자세히 배울 수 있습니다.

중급 Git 면접 질문

Git에서 원격(remote)이란 무엇인가요?

원격은 협업과 코드 공유를 위해 서버나 다른 컴퓨터에 호스팅되는 저장소입니다. 개발자들이 로컬 변경 사항을 푸시하고, 다른 사람이 만든 변경 사항을 풀 할 수 있는 중앙 위치 역할을 합니다.

원격은 일반적으로 GitHub, GitLab, Bitbucket 같은 호스팅 플랫폼에 설정되며, 분산 개발을 가능하게 하고 여러 기여자가 프로젝트 코드를 저장하고 동기화할 수 있는 공통 장소를 제공하여 팀워크를 촉진합니다.

이미 푸시되어 공개된 커밋을 어떻게 되돌리나요?

git revert <commit-hash> 명령을 사용하면 이미 푸시되어 공개된 커밋을 되돌릴 수 있습니다.

단계별 절차는 다음과 같습니다:

1. 되돌리고자 하는 커밋의 해시를 찾습니다. git log 명령으로 커밋 기록을 확인해 원하는 커밋 해시를 찾을 수 있습니다.

2. 커밋 해시를 찾았다면, 해당 해시와 함께 git revert 명령을 사용해 지정한 커밋이 도입한 변경을 취소하는 새로운 커밋을 만듭니다. 예:

git revert <commit-hash>

3. Git이 텍스트 편집기를 열어 되돌리기 커밋 메시지를 작성하도록 합니다. 필요하면 메시지를 수정한 뒤 저장하고 닫습니다.

4. 메시지를 저장하면 Git은 지정한 커밋이 도입한 변경을 사실상 취소하는 새 커밋을 생성합니다. 이 커밋은 기록에 추가되어 원래 커밋의 변경을 되돌립니다.

5. 마지막으로 다음 명령으로 새 커밋을 원격 저장소에 푸시해 되돌리기를 공개합니다:

git push origin <branch-name> 

git revert를 사용하면 원래 커밋이 도입한 변경을 취소하는 새로운 커밋을 생성하므로, 커밋 이력을 변경하지 않고도 효과적으로 되돌릴 수 있습니다. 이는 커밋 이력을 바꾸어 협업자에게 문제를 일으킬 수 있는 git reset이나 git amend보다 안전한 접근입니다.

git stash란 무엇인가요?

git stash는 아직 커밋할 준비가 되지 않은 작업 디렉터리의 변경 사항을 임시로 저장하는 명령입니다. 변경 사항을 저장소에 커밋하지 않고 보관할 수 있게 해 줍니다.

브랜치를 전환해야 하지만 변경 사항을 커밋하거나 잃고 싶지 않을 때 유용합니다. 나중에 스태시에 보관된 변경을 작업 디렉터리에 적용하거나 스택에서 꺼내 계속 작업할 수 있습니다.

git reflog란 무엇인가요?

git reflog는 HEAD 포인터의 변경과 저장소에서 체크아웃된 커밋의 이력을 기록하는 reference log를 조회하는 명령입니다. 커밋, 체크아웃, 머지, 리셋 등 저장소에서 최근 수행된 작업을 시간순으로 보여 줍니다.

reflog는 유실된 커밋이나 브랜치를 복구하고, 저장소에서 수행된 작업의 순서를 이해하는 데 도움이 됩니다.

기존 Git 브랜치를 원격 브랜치를 추적하도록 설정하려면?

기존 브랜치를 원격 브랜치를 추적하도록 만들려면, --set-upstream-to 또는 -u 옵션과 원격 브랜치 이름을 함께 사용해 git branch 명령을 실행하면 됩니다.

문법은 다음과 같습니다:

git branch --set-upstream-to=<remote-name>/<branch-name>

또는

git branch -u <remote-name>/<branch-name>

고급 Git 면접 질문

프로젝트별로 서로 다른 구성을 Git에서 어떻게 관리하나요?

여러 구성을 처리하려면 --global, --system, --local 플래그와 함께 git config 명령을 사용해 서로 다른 수준의 설정을 조정하세요. 또는 Git 설정에서 includeIf를 사용해 저장소 경로에 따라 특정 설정을 포함할 수 있습니다.

Git으로 대용량 파일을 어떻게 처리하나요?

대용량 파일은 저장소 크기와 성능에 영향을 주기 때문에 Git에서 다루기 까다로울 수 있습니다. Git LFS를 사용해 큰 파일을 Git 저장소 외부에 보관하고, 저장소에는 가벼운 포인터만 유지하세요. 이렇게 하면 저장소 크기를 줄이고 성능을 개선할 수 있습니다. Git LFS는 다양한 스토리지 공급자를 지원하며 Git 워크플로와 매끄럽게 통합됩니다.

git submodule의 용도는 무엇이며, 어떻게 업데이트하나요?

git submodule 명령은 Git 저장소 내에서 외부 의존성을 관리합니다. 메인 저장소 안에 외부 저장소를 서브모듈로 포함할 수 있습니다. 메인 프로젝트 코드와 분리된 상태로 외부 소스의 코드를 포함하고자 할 때 유용합니다.

Git에서 서브모듈을 업데이트하는 단계는 다음과 같습니다:

  1. 메인 저장소 내 서브모듈 디렉터리로 이동합니다.

  2. git fetch로 서브모듈의 원격 저장소에서 최신 변경 사항을 가져옵니다.

  3. 서브모듈이 추적하는 브랜치의 최신 커밋으로 업데이트하려면 git pull을 사용합니다.

  4. 특정 커밋이나 브랜치로 업데이트하려면 원하는 커밋 해시나 브랜치 이름과 함께 git checkout을 사용합니다.

  5. 원하는 상태로 서브모듈을 업데이트했다면, 변경된 서브모듈 상태를 반영하도록 메인 저장소에 커밋해야 합니다.

git cherry-pick이란 무엇이며, 언제 사용하나요?

git cherry-pick은 전체 브랜치를 병합하지 않고 특정 커밋 하나만 다른 브랜치에 적용할 수 있게 해 줍니다.

git cherry-pick <commit-hash>
 
흔한 사례는 버그 수정의 백포팅입니다. 예를 들어 main 브랜치에서 버그를 고쳤는데, 같은 수정이 release 브랜치에도 필요할 때 전체 mainrelease에 병합하는 대신 해당 커밋만 체리픽할 수 있습니다.

커밋이 잘못된 브랜치에 들어간 경우에도 유용합니다. 올바른 브랜치에 체리픽한 다음, 원래 있지 말아야 할 브랜치에서는 되돌리면 됩니다.

git bisect란 무엇이며, 무엇에 사용하나요?

git bisect이진 탐색을 사용해 버그를 도입한 특정 커밋을 찾는 디버깅 도구입니다. 커밋을 하나씩 수동으로 확인하는 대신, 버그가 없는 "good" 커밋과 버그가 있는 "bad" 커밋을 지정하면 Git이 그 사이의 커밋을 체크아웃하며 매번 탐색 범위를 절반으로 줄여 범인을 찾아냅니다.

git bisect start
git bisect bad                # 현재 커밋에 버그가 있음
git bisect good <commit-hash> # 이 이전 커밋은 정상
# Git이 중간 커밋을 체크아웃합니다. 테스트 후:
git bisect good   # 또는 git bisect bad
# Git이 첫 번째 문제 커밋을 식별할 때까지 반복
git bisect reset  # 완료 후 원래 상태로 복귀

수백 개의 커밋이 있는 대형 저장소에서 수동으로 찾는 것보다 훨씬 빠릅니다.

Git 훅(hook)은 무엇이며, 어떻게 사용하나요?

Git 훅은 Git 워크플로의 특정 시점에 자동으로 실행되는 스크립트입니다. 저장소의 .git/hooks/ 디렉터리에 있으며, 어떤 스크립트 언어로도 작성할 수 있습니다.

두 가지 유형이 있습니다:

  • 클라이언트 측 훅은 로컬 머신에서 실행됩니다. 예를 들어 커밋 생성 전에 실행되는 pre-commit이나, 커밋 메시지 형식을 검증하는 commit-msg 등이 있습니다.

  • 서버 측 훅은 원격 서버에서 실행됩니다. 예를 들어 푸시된 커밋이 수락되기 전에 실행되는 pre-receive가 있습니다.

일반적인 사용 예로, 커밋을 허용하기 전에 린터나 테스트 스위트를 자동으로 실행하는 pre-commit 훅이 있습니다. 이는 팀 전반의 코드 품질 기준을 강제하는 데 도움이 됩니다.

훅은 저장소를 클론할 때 자동으로 복사되지 않으므로, 훅에 의존하는 팀은 일반적으로 별도의 스크립트나 pre-commit(Python 패키지) 같은 도구를 통해 공유합니다.

자주 혼동되는 Git 개념 질문

git fetch와 git pull의 차이는 무엇인가요?

git fetch와 git pull의 주요 차이는 수행 동작과 로컬 저장소 업데이트 방식에 있습니다.

git fetch는 원격 저장소의 변경을 로컬 저장소로 가져옵니다. 원격 추적 브랜치(예: origin/master)를 원격 저장소의 상태로 업데이트하지만, 작업 디렉터리를 변경하거나 현재 브랜치에 병합하지는 않습니다. 따라서 가져온 후 로컬 작업에 영향을 주지 않고 원격의 변경 사항을 검토할 수 있습니다.

git pull도 원격 저장소에서 변경을 가져오지만, 한 단계 더 나아가 현재 브랜치에 그 변경을 병합까지 합니다. 본질적으로 git fetch 후 git merge를 수행해 원격 변경을 현재 브랜치에 통합합니다.

git reset은 무엇을 하나요?

git reset 명령은 현재 HEAD를 지정한 상태로 리셋합니다. 즉, 변경 사항을 되돌리거나, 스테이징을 해제하거나, HEAD 포인터를 다른 커밋으로 이동시키는 데 사용할 수 있습니다. git reset에는 세 가지 주요 모드가 있습니다:

  • --soft: HEAD 포인터를 특정 커밋으로 이동하지만 변경 사항은 스테이징 상태로 유지합니다. 파일은 작업 디렉터리에서 수정된 채로 남아 재커밋할 수 있습니다.
  • --mixed: HEAD 포인터를 특정 커밋으로 이동하고 변경 사항의 스테이징을 해제합니다. 파일은 작업 디렉터리에서 수정된 채로 남지만, 커밋을 위해 스테이징되지는 않습니다.
  • --hard: HEAD 포인터를 특정 커밋으로 이동하고 작업 디렉터리와 스테이징 영역의 모든 변경 사항을 버립니다. 커밋되지 않은 변경을 영구적으로 삭제하므로 주의해서 사용하세요.

중요: 이미 공유 원격 브랜치에 푸시된 커밋에 대해 git reset --hard를 절대 사용하지 마세요. 이력를 재작성하여 해당 커밋을 이미 풀 한 팀원들에게 심각한 문제를 유발합니다. 공개 커밋에는 대신 git revert를 사용하세요.

git push --force-with-lease는 git push --force와 비교해 어떤 점이 중요한가요?

git push --force-with-leasegit push --force보다 원격 저장소에 강제 푸시할 때 더 신중한 방식입니다. 다른 사람이 원격에서 작업한 변경을 실수로 덮어쓰는 것을 방지합니다.

git push --force를 사용하면 마지막 fetch 이후 원격이 업데이트되었는지와 상관없이 변경을 강제로 푸시합니다. 이는 다른 개발자의 작업이 의도치 않게 손실되는 결과를 낳을 수 있습니다.

반면 git push --force-with-lease는 더 안전한 대안입니다. 푸시하려는 원격 브랜치가 마지막 fetch 이후 다른 사람에 의해 업데이트되었는지 확인합니다. 원격 브랜치가 업데이트되었다면 푸시를 거부해 타인의 변경을 덮어쓰지 않도록 합니다.

git rebase란 무엇이며, git merge와는 어떻게 다른가요?

git rebasegit merge는 모두 한 브랜치의 변경을 다른 브랜치에 통합하지만, 방식이 다릅니다.

  • git merge는 새로운 "머지 커밋"을 생성하여 두 브랜치의 이력을 결합합니다. 브랜치가 언제 분기되고 다시 합쳐졌는지의 전체 이력을 보존하므로, 감사를 위한 추적과 팀의 투명성에 유용합니다.

  • git rebase는 한 브랜치의 커밋을 다른 브랜치 위로 옮기거나 재생하여, 머지 커밋이 없는 깔끔하고 선형적인 커밋 이력을 만듭니다. 로그를 읽기 쉽게 해 주지만, 커밋 이력을 재작성합니다. 그래서 리베이스의 황금률은 다음과 같습니다: 다른 사람이 작업 중인 브랜치를 리베이스하지 말 것.

git clone과 git fork의 차이는 무엇인가요?

클론은 원격 저장소의 로컬 사본을 내 머신에 생성합니다. 동일한 저장소에 연결되어 있으며(권한이 있다면) 변경 사항을 다시 푸시할 수 있습니다.

git clone https://github.com/user/repo.git
포크는 일반적으로 GitHub나 GitLab에서, 다른 사람의 저장소를 내 계정 아래 서버 측 사본으로 만드는 것입니다. 포크는 내가 소유하므로 자유롭게 푸시할 수 있습니다. 변경이 준비되면 원본 저장소에 풀 리퀘스트를 보냅니다.

포크는 원본 저장소에 직접 쓸 권한이 없는 오픈 소스 프로젝트에 기여할 때의 표준 워크플로입니다.

Git 면접 준비하기

면접에서 Git 지식과 경험을 효과적으로 제시하는 것은 버전 관리 및 팀 협업 역량을 보여 주는 데 매우 중요합니다.

기술 면접을 준비하며 Git 역량을 효과적으로 전달하기 위해 따라야 할 팁을 살펴보겠습니다:

Git의 기초를 이해하세요

저장소, 브랜칭, 병합, 커밋과 pull, push, clone, commit 같은 기본 명령 등 Git의 기초를 탄탄히 이해하세요. 이러한 기초 지식은 면접 중 논의의 기반이 됩니다. 또한 버전 관리의 핵심 원칙과 Git과 다른 버전 관리 시스템의 차이를 깊이 이해해 두면 도움이 됩니다.

마지막으로 Git Flow, GitHub Flow, GitLab Flow 같은 다양한 Git 방법론에 익숙해지세요. 각 접근법의 장단점을 평가하고, 어떤 상황에서 가장 유용한지 파악합니다.

기초를 익히는 출발점으로 Git 완전 가이드를 참고하세요.

실습 경험을 쌓으세요

Git을 많이 사용할수록 지식이 더욱 공고해집니다. 정기적으로 연습하면 다양한 명령과 절차에 익숙해집니다. 더 많은 경험을 쌓기 위해 일상적인 워크플로에 Git을 통합해 보세요. 브랜치를 만들고 병합하며 충돌을 해결하는 실험도 해 보세요.

Git 실습을 위해 어떤 프로젝트를 할지 막막하다면, GitHub 같은 플랫폼을 통한 오픈 소스 프로젝트 참여가 업계 표준 협업 도구와 워크플로를 직접 체험하기에 좋은 방법입니다.

자주 발생하는 문제와 해결 방법을 익히세요

Git을 사용하다 보면 문제를 피할 수 없습니다. 흔한 이슈로는 머지 충돌, 분리된(detached) HEAD 상태, 변경 되돌리기, 유실된 커밋 복구 등이 있습니다. Git 문제를 진단하는 과정은 트러블슈팅 역량을 높이고 Git의 내부 메커니즘에 대한 더 깊은 이해를 돕습니다.

에러 메시지를 적극적으로 분석하고 문제를 해결하는 과정을 통해 Git의 내부 동작을 이해하고, 이슈를 효과적으로 식별·해결하는 능력을 갖추게 됩니다. 이러한 선제적 접근은 잠재적 위험을 줄이고, 버전 관리 워크플로를 자신감 있게 운영하는 데 도움이 됩니다.

모의 면접을 연습하세요

모의 면접을 통해 지원자는 Git 지식과 커뮤니케이션에서의 약점을 파악하여 효과적으로 준비에 집중할 수 있습니다.

또한 모의 면접은 현실적인 Git 관련 시나리오와 코딩 연습을 통해 문제 해결 능력을 연마할 수 있는 소중한 기회를 제공합니다. 이러한 실습은 Git 역량에 대한 자신감을 높이고, 면접 중 생각을 명확하게 표현하는 능력을 향상시킵니다.

결론

Git은 코드 변경을 관리하고, 협업을 수행하며, 프로젝트 이력을 유지하기 위해 소프트웨어 개발에서 널리 사용되는 강력한 버전 관리 시스템입니다. Git에 익숙하다는 것은 필수 개발 도구와 워크플로에 대한 숙련도를 보여 주고, 협업 능력을 입증하며, 팀 환경에서 코드를 효율적으로 관리할 수 있음을 강조하기 때문에 기술 면접에서 중요합니다.

아울러 Git 개념과 명령을 이해하면 효율적인 버전 관리 관행을 구현할 수 있어 코드 무결성, 프로젝트 연속성, 개발 프로세스의 간소화를 보장합니다. 따라서 Git에 대한 지식은 기술 면접을 준비하고 성공적인 커리어를 추구하는 예비 소프트웨어 엔지니어와 개발자에게 매우 가치가 있습니다.

추가 학습 자료:

주제

오늘 바로 Git 여정을 이어가세요!

tracks

데이터 엔지니어 in Python

40
데이터 엔지니어링 분야에서 두각을 나타낼 수 있도록, 수요가 높은 기술을 익혀 데이터를 효율적으로 수집, 정제, 관리하고 파이프라인을 예약 및 모니터링하세요.
자세히 보기Right Arrow
강좌 시작
더 보기Right Arrow