동료들에게 Git 사용과 관련된 문제에 대해 비슷한 질문을 반복해서 받는 것 같습니다. 질문 받은 것들에 대해 Q&A를 간단히 정리해 둡니다. 저장소는 다음과 같은 지향점을 가지고 정리하였습니다.
- Git 사용중 마주하는 문제를 중심으로 해결 방법을 간단히 기술합니다.
- Git의 개념과 원리에 대한 설명은 최소화합니다. (정리하고 보니 충돌 카테고리 외에는 개념 설명이 없습니다)
- IntelliJ 기반 GUI 사용법을 설명합니다. (git command도 시간이 되면 정리하고 싶습니다)
Q : A소스 코드 N라인 누가 마지막에 수정한거지? blame
Q : 특정 브랜치의 커밋을 마스터 브랜치로 가져오고 싶어요 cherry pick
Q : 특정 커밋에서 발생한 변경사항을 다른 브랜치로 옮기고 싶어 patch
Q : 충돌이 왜 나는 거야? conflict
Q : 그래서 충돌은 어떻게 해결해? resolve
Q : 지금 뭔가 잘못 코딩하고 있는 것 같아. 직전 커밋 상태로 깨끗하게 돌리고 싶어. roll-back
Q : 특정 커밋의 변경사항을 되돌려야 하는데, 다음에 다시 사용하게 이력은 남기고 싶어 revert
Q : 뭔가 완전히 잘못되었어! 브랜치를 특정 커밋 지점으로 완전히 돌아가고 싶어! 커밋된 변경도 다 삭제하고 싶어! reset --hard
Q : 브랜치를 특정 커밋 지점으로 돌리면서, 해당 커밋 이후에 발생한 변경 사항들은 워킹 디렉토리에 유지하고 싶어. reset --soft
Q : Reset 후 원격 저장소에 Push 하면 Push Reject 되네. Merge나 Rebase 하면 자꾸 Reset한 걸 다시 가져와... 내걸로 원격 저장소를 덮어쓰고 싶은데 push --force
Q : 마스터 브랜치에 실수로 Merge 를 해버렸어. 깔금하게 Merge 이전으로 돌리고 싶은데?
Q : Amend 해서 하나로 합치기 전으로 다시 돌아가고 싶은데? reflog
Q : 특정 경로에 있던 파일이 보이지 않아요? 실수로 삭제(또는 이동)된 것 같아요. 어느 커밋에서 삭제된 걸까요? log --name-status
revert
Q : 지금 개발중이라 빌드가 안되는 상태인데, 잠시 다른 브랜치로 이동해서 작업하고 싶은데, 이걸 커밋해 두기는 애매하네 어떻하지? stash
Q : 브랜치 옆에 표시되는 이 화살표는 뭐야? out-of-date