Git 주니어 기술면접
새 면접Q. git branch 명령어로 브랜치를 생성한 후, 해당 브랜치로 이동하려면 어떤 명령어를 사용해야 하나요? 또한 브랜치 생성과 이동을 한 번에 할 수 있는 방법도 설명해주세요.
git branch 명령어로 브랜치를 생성한 후에는 git checkout 브랜치명 또는 git switch 브랜치명으로 이동할 수 있습니다. 브랜치 생성과 이동을 동시에 하려면 git checkout -b 브랜치명 또는 git switch -c 브랜치명을 사용합니다. Git 2.23 버전부터는 브랜치 전환을 위해 switch 명령어 사용이 권장됩니다. checkout은 여러 기능을 담당하지만, switch는 브랜치 전환에 특화되어 있어 더 명확합니다.
- • git checkout 브랜치명 또는 git switch 브랜치명으로 브랜치 이동
- • git checkout -b 또는 git switch -c로 생성과 이동을 동시에 수행
- • Git 2.23 이후 switch가 브랜치 전환의 권장 명령어
현재 작업 중인 변경사항을 커밋하지 않고 다른 브랜치로 이동하려고 하면 어떤 문제가 발생하나요? 이를 해결하는 방법은 무엇인가요?
Q. git commit --amend 명령어의 용도와 사용 시 주의사항을 설명해주세요. 특히 이미 push한 커밋을 amend하면 어떤 문제가 발생할 수 있나요?
git commit --amend는 가장 최근 커밋을 수정하는 명령어로, 커밋 메시지를 변경하거나 빠뜨린 파일을 추가할 때 사용합니다. 이 명령어는 새로운 커밋을 생성하는 것이 아니라 기존 커밋을 대체하므로 커밋 해시가 변경됩니다. 이미 원격 저장소에 push한 커밋을 amend하면 로컬과 원격의 히스토리가 달라져서 다른 개발자들과 충돌이 발생할 수 있습니다. 이 경우 force push가 필요하며, 협업 중인 브랜치에서는 사용을 피해야 합니다.
- • 최근 커밋의 메시지나 내용을 수정하는 명령어
- • 커밋 해시가 변경되어 히스토리가 재작성됨
- • push한 커밋을 amend하면 협업 시 충돌 발생 가능
여러 개의 이전 커밋들을 수정하거나 합치고 싶다면 어떤 명령어를 사용해야 하나요?
Q. git stash의 개념과 사용 목적을 설명하고, stash한 변경사항을 다시 적용하는 방법들을 비교해주세요.
git stash는 현재 작업 중인 변경사항을 임시로 저장하고 작업 디렉토리를 깨끗하게 만드는 명령어입니다. 급하게 다른 브랜치로 이동해야 하거나 커밋하기 애매한 작업을 임시 보관할 때 사용합니다. stash한 내용을 적용하는 방법은 git stash apply와 git stash pop이 있는데, apply는 stash 목록에 보관하면서 적용하고 pop은 적용 후 목록에서 제거합니다. git stash list로 저장된 stash 목록을 확인할 수 있으며, 여러 개의 stash를 관리할 수 있습니다.
- • 작업 중인 변경사항을 임시 저장하는 기능
- • git stash apply는 stash를 유지하며 적용, pop은 적용 후 제거
- • 여러 stash를 스택 형태로 관리 가능
stash를 적용할 때 현재 작업 디렉토리의 변경사항과 충돌이 발생하면 어떻게 해결해야 하나요?
Q. git remote의 역할을 설명하고, origin이라는 이름이 의미하는 것은 무엇인지 말씀해주세요. 또한 원격 저장소를 추가하는 방법도 설명해주세요.
git remote는 원격 저장소의 연결 정보를 관리하는 명령어입니다. origin은 git clone 시 자동으로 설정되는 기본 원격 저장소의 별칭으로, 원본 저장소를 가리키는 관례적인 이름입니다. 원격 저장소를 추가하려면 git remote add 별칭 URL 명령어를 사용하며, git remote -v로 등록된 원격 저장소 목록을 확인할 수 있습니다. 하나의 로컬 저장소에 여러 개의 원격 저장소를 연결할 수 있어, upstream 등의 이름으로 추가 저장소를 관리할 수 있습니다.
- • 원격 저장소의 별칭과 URL을 관리하는 기능
- • origin은 clone 시 자동 설정되는 기본 원격 저장소 이름
- • git remote add로 여러 원격 저장소 추가 가능
fork한 저장소에서 작업할 때 원본 저장소를 upstream으로 추가하는 이유는 무엇인가요?
Q. Git에서 태그(tag)의 용도와 Lightweight 태그와 Annotated 태그의 차이점을 설명해주세요. 실무에서는 어떤 태그를 주로 사용하나요?
Git 태그는 특정 커밋을 표시하는 기능으로, 주로 릴리스 버전을 관리할 때 사용합니다. Lightweight 태그는 단순히 특정 커밋을 가리키는 포인터로 git tag 태그명 명령어로 생성하며, Annotated 태그는 태그 작성자, 날짜, 메시지 등 추가 정보를 포함하며 git tag -a 태그명 -m 메시지로 생성합니다. 실무에서는 릴리스 버전 관리 시 Annotated 태그를 사용하는 것이 권장되는데, 누가 언제 왜 릴리스했는지 추적할 수 있기 때문입니다. 태그는 기본적으로 push되지 않으므로 git push origin 태그명 또는 git push --tags로 별도로 push해야 합니다.
- • 태그는 특정 커밋을 표시하여 버전 관리에 사용
- • Lightweight는 단순 포인터, Annotated는 메타데이터 포함
- • 실무에서는 Annotated 태그가 권장되며 별도로 push 필요
이미 생성한 태그를 삭제하거나 다른 커밋으로 이동시키려면 어떻게 해야 하나요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!