커밋 로그 조작

이전에 작성한 커밋을 수정하고 싶다

$ git commit --amend

--amend 옵션을 지정해서 커밋하면, 현재 브랜치의 선두를 커밋에 덮어쓸 수 있습니다.

발전 편 【커밋 변경하기】 이전에 작성한 커밋 수정하기
발전 편 【튜토리얼 3: 커밋을 변경해보자!】 1. commit --amend

Back To Top

직전 커밋의 메시지 만을 수정하고 싶다

$ git commit --amend

인덱스에 파일을 등록하지 않은 상태에서 --amend 옵션을 지정하고 다시 커밋합니다. 댓글 입력화면이 표시되므로 코멘트를 수정합니다.

발전 편 【커밋 변경하기】 이전에 작성한 커밋 수정하기
발전 편 【튜토리얼 3: 커밋을 변경해보자!】 1. commit --amend

Back To Top

과거 커밋의 내용을 수정하고 싶다

$ git rebase -i <commit>

지정 한 커밋 이후의 커밋을 지정하면 커밋의 목록이 표시됩니다. 그 중에서 수정하려는 커밋을 찾아 그 행의 pick 문자를 edit 으로 변경하고 저장 · 종료합니다.

다음으로 수정하고 싶은 파일을 편집, 보존한 뒤에 --amend옵션을 지정하여 커밋을 실행합니다.

$ git commit --amend

마지막으로 --continue옵션을 지정하여 rebase를 실행합니다.

$ git rebase --continue

발전 편 【커밋 변경하기】 커밋 이력 편집하기
발전 편 【튜토리얼 3: 커밋을 변경해보자!】 6. rebase -i 로 커밋 모두 통합하기

Back To Top

과거의 커밋 메시지 만을 수정하고 싶다

$ git rebase -i <commit>

지정한 커밋보다 이후의 커밋을 지정하면, 커밋의 목록이 표시됩니다. 그 중에서 코멘트을 수정하려고 하는 커밋을 찾아 그 행 pick 문자를 edit로 변경하고 저장 · 종료합니다.

다음 --amend 옵션을 지정하여 커밋을 실행합니다. 코멘트 입력 화면이 표시되므로 코멘트를 수정합니다.

$ git commit --amend

마지막으로 --continue옵션을 지정하여 rebase를 실행합니다.

$ git rebase --continue

발전 편 【커밋 변경하기】 커밋 이력 편집하기
발전 편 【튜토리얼 3: 커밋을 변경해보자!】 6. rebase -i 로 커밋 모두 통합하기

Back To Top

rebase를 하는 도중에 중지하고 싶다

$ git rebase --abort

--abort 옵션을 지정하여 rebase 명령어를 실행하면 rebase 를 중지할 수 있습니다.

Back To Top

HEAD의 이동 이력을 보고 싶다

$ git reflog

reflog 명령을 실행하는 것으로 과거에 HEAD가 가리킨 커밋의 목록을 볼 수 있습니다.

08084a5 HEAD@{0}: commit: pull 설명을 추가
99daed2 HEAD@{1}: commit: commit의 설명 추가
48eec1d HEAD@{2}: checkout: moving from master to issue1
326fc9f HEAD@{3}: commit: add 설명을 추가
48eec1d HEAD@{4}: commit (initial): first commit

이 목록에는 삭제한 커밋 및 rebase 등에 의해 정리된 커밋도 표시됩니다.

Back To Top

브랜치 앞부분의 이동 이력을 보고 싶다

$ git reflog <ref>

<ref>에 브랜치명을 지정하여 reflog 명령을 실행하면 과거에 그 브랜치의 선두가 가리키는 커밋의 목록을 다음과 같은 형식으로 볼 수 있습니다.

445e0ae issue1@{0}: commit (merge): Merge branch 'master' into issue1
1c904bd issue1@{1}: commit (amend): pull의 설명을 수정
08084a5 issue1@{2}: commit: pull 설명을 추가
99daed2 issue1@{3}: commit: commit의 설명 추가
48eec1d issue1@{4}: branch: Created from 48eec1ddf73a7fb508ef664efd6b3d873631742f

이 목록에는 삭제한 커밋 및 rebase 등에 의해 정리된 커밋도 표시됩니다.

Back To Top

이전 커밋을 취소하고 싶다

$ git reset --hard HEAD~

발전 편 【커밋 변경하기】 커밋을 버리고 특정 버전으로 다시 되돌아가기
발전 편 【튜토리얼 3: 커밋을 변경해보자!】 3. reset

Back To Top

rebase를 취소하고 싶다

$ git reset --hard <commit>

먼저 reflog 명령어를 사용하여 rebase하기 직전의 커밋을 찾아, 해당 커밋의 해시 값 또는 「HEAD@{숫자}」 값을 확인합니다. . 이하의 기록은 update 2의 커밋을 한 후에 rebase 명령어로 2개의 커밋을 통합한 후의 이력인데, 71bdfbd 및 HEAD@{4}가 적당한 커밋입니다.

a51f8d2 HEAD@{0}: rebase -i (finish): returning to refs/heads/dev
a51f8d2 HEAD@{1}: rebase -i (squash): update 1
3a273e1 HEAD@{2}: rebase -i (squash): updating HEAD
f55ef69 HEAD@{3}: checkout: moving from dev to f55ef69
71bdfbd HEAD@{4}: commit: update 2
f55ef69 HEAD@{5}: commit (amend): update 1

찾아낸 해시 값 또는「HEAD@{숫자}」값을 <commit>에 지정하여 reset 명령을 실행합니다.

이는 rebase에 의해 이동한 브랜치 앞부분의 위치를 rebase하기 전의 커밋의 위치로 되돌림으로써, rebase를 없었던 것으로 하고 있습니다.

Back To Top

이전에 실행한 reset을 취소하고 싶다

$ git reset --hard ORIG_HEAD

reset 전의 커밋은 ORIG_HEAD라는 이름으로 참조할 수 있으므로, 이를 지정하여 reset합니다.

발전 편 【커밋 변경하기】 커밋을 버리고 특정 버전으로 다시 되돌아가기
발전 편 【튜토리얼 3: 커밋을 변경해보자!】 3. reset

Back To Top

다른 브랜치로부터 특정 커밋을 가져와서 내 브랜치에 넣고 싶다

$ git cherry-pick "<commit>"

<commit>에 지정한 커밋을 현재 브랜치에 복사합니다.

발전 편 【커밋 변경하기】 다른 브랜치로부터 특정 커밋을 가져와서 내 브랜치에 넣기
발전 편 【튜토리얼 3: 커밋을 변경해보자!】 3. cherry-pick

Back To Top

특정 코멘트를 포함한 커밋을 찾고 싶다

$ git log --grep "<pattern>"

<pattern>에 지정한 문자가 커밋 로그에 포함되는 커밋만을 표시합니다.

Back To Top