본 문서는 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)
반응형
'번역 > Git Notes for Professionals' 카테고리의 다른 글
52.2: TortoiseGit : Assume unchanged 설정하기 (0) | 2020.05.11 |
---|---|
52.1: TortoiseGit : 커밋들 squash 하기 (0) | 2020.05.11 |
50.2: 기타 GUI 도구들 (0) | 2020.05.07 |
50.1: gitk 와 git-gui (0) | 2020.05.07 |
49.3: 이메일을 통해 패치 발송하기 (0) | 2020.05.04 |