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

Section 7.3: reflog 활용하기

rebase 수행시 작업이 원하는 대로 완료되지 않았을 때, rebase 이전의 커밋으로 되돌려서 작업을 다시 시도해 보고 싶을 수 있다. 이런 경우 reflog 를 이용하는 것이 편리하다 (reflog 는 최근 90일간의 사용자가 수행한 로컬 작업 내역을 기록하고 있다 - 이 설정은 변경 가능하다):

$ git reflog 4a5cbb3 HEAD@{0}: rebase finished: returning to refs/heads/foo 4a5cbb3 HEAD@{1}: rebase: fixed such and such 904f7f0 HEAD@{2}: rebase: checkout upstream/master 3cbe20a HEAD@{3}: commit: fixed such and such ...

reflog 기록으로부터 rebase 직전의 커밋이 HEAD@{3} (해시값을 참조하는 것도 가능하다) 임을 확인 가능하다:

git checkout HEAD@{3}

이렇게 rebase 직전의 커밋으로 돌아간 후, 새로운 브랜치 생성 / 예전 브랜치 삭제 / rebase 재수행 등의 작업을 할 수 있다.

reflog 를 이용하여 아래와 같이 기록상의 특정 지점으로 직접 초기화를 수행할 수도 있으나, 이러한 작업이 실제 사용자가 원하는 작업인지 100% 확신할때만 수행하도록 한다:

git reset --hard HEAD@{3}

위 명령어는 사용자의 현재 Git tree 내용물을 파라미터로 주어진 지점의 내용물과 동일하게 재설정한다 ("7.2: 변경 사항을 되돌리기" 참고).

이러한 방법은 특정 브랜치를 다른 브랜치에 rebase 했을때 어떻게 동작하는지 확인을 위해 임시로 작업을 완료하고 나서, 실제 결과물은 계속 유지하고 싶지 않을때 사용할 수 있다.

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

반응형

+ Recent posts