GitNotes.51-1.md
본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

Section 51.1: git reflog 를 이용해서 문제를 발생시킨 rebase 복구하기

아래와 같이 대화형 (interactive) rebase 를 수행하는 상황을 가정해 보자:

git rebase --interactive HEAD~20

이러한 상황에서, 실수로 몇개의 커밋을 squash 하거나 누락 (drop) 시켜 의도치 않게 커밋이 유실된 상태로 rebase 작업이 종료될 수 있다. 이러한 상태에서 복구를 하고자 한다면, git reflog 를 실행한다. 실행 결과로 아래와 유사한 화면이 나타날 것이다:

aaaaaaa HEAD@{0} rebase -i (finish): returning to refs/head/master bbbbbbb HEAD@{1} rebase -i (squash): Fix parse error ... ccccccc HEAD@{n} rebase -i (start): checkout HEAD~20 ddddddd HEAD@{n+1} ... ...

이 경우, 가장 아래 표시된 커밋인 ddddddd (혹은 HEAD@{n+1}) 가 rebase 수행 전 브랜치의 마지막 상태를 가리키고 있음을 확인할 수 있다. 따라서, 해당 커밋을 다시 복구하기 위해서는 (실수로 squash 혹은 drop 된 커밋들을 포함한 모든 부모 커밋들까지), 아래와 같이 입력한다:

$ git checkout HEAD@{n+1}

이제 사용자는 해당 커밋으로부터 새로운 브랜치를 git checkout -b [branch] 명령을 통해 생성할 수 있을 것이다. 이와 관련된 더 상세한 정보는 Branching 항목을 참고하라.

[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)

반응형

+ Recent posts