git commit -C option
추가하지 않아야 할 파일을 실수로 add 하여 git commit 까지 한 경우, 기존 commit message 를 유지하면서, 해당 파일만 제거하거나, 수정하고 싶은 경우가 있다.
매번 아래 명령을 사용하여 불필요한 파일을 삭제하였으나, 다시 commit 할 경우에 commit message 를 새로 써야해서 불편했다.
# git reset --soft HEAD^
# git reset HEAD path/tounwanted_file
또는 파일 수정
# git commit
< commit message 새로 작성 >
그런데, 아주 편리한 방법이 있었다.
# git reset --soft HEAD^
# git reset HEAD path/tounwanted_file
또는 파일 수정
# git commit -c ORIG_HEAD
이렇게 하면, reset 명령을 내리기 이전의 commit message 를 불러와서 수정할 수 있게 되어 매.우. 편리하다.
git symbolic reference
그럼 ORIG_HEAD 는 어떤 것인지 알아보자
우선 git 에서 제공하는 symbolic reference 가 몇가지 있다. HEAD, ORIG_HEAD, FETCH_HEAD, MERGE_HEAD, CHERRY_PICK_HEAD 등. 해당 내용은 $git_dir/ 아래에 존재한다.
# cd .git
# ls
...
HEAD
ORIG_HEAD
MERGE_HEAD
FETCH_HEAD
CHERRY_PICK_HEAD
...
# cat HEAD
20d0ef8675314d43fe730dc51234bb2392b3e5b5
https://goo.gl/iyLaFJ 설명을 참고하면, 각 refname 의 의미는 다음과 같다.
HEAD : working tree 의 최신 commit 을 가리킨다.
FETCH_HEAD : 마지막 git fetch 명령으로 원격 저장소에서 가져온 브랜치의 HEAD 를 가리킨다.
MERGE_HEAD : git merge 를 수행할 때, 브랜치에 merge 할 commit 을 가리킨다
CHERRY_PICK_HEAD : git cherry-pick 수행할 때, 체리픽킹하는 commit 을 가리킨다.
*ORIG_HEAD : HEAD 의 위치를 변경하는 위험한 명령(예를 들면 reset)을 수행할 때, 쉽게 이전 HEAD 상태로 돌아오기 위해서 이전 HEAD 의 위치를 가리킨다.
실수로 git reset --hard 를 수행한 경우라면 아래와 같이 복구할 수 있다.
# git reset --hard ORIG_HEAD
현재의 ORIG_HEAD 가 궁금하다면, git show 또는 git log 명령으로 확인할 수 있다.
# git show ORIG_HEAD
# git log ORIG_HEAD
아래와 같은 명령을 사용하면 git commit 에 대한 undo / redo 를 수행할 수 있다.
# git commit
# git reset --soft HEAD^
# edit
# git commit -a -c ORIG_HEAD
git reflog
위와 같이 이미 정의된 symbolic reference 가 아니라, 내가 이전에 수행했던 log 에 대한 reference 를 하고 싶다면, 다음 명령을 사용한다.
# git reflog
위 명령은 local repository 에서 branch 나 reference 를 바꾸는 일이 일어나는 것을 기록한 log 이다. (reference log)
-C 옵션 이후에 사용하고 싶은 reference log 의 hash 값을 넣으면 해당 commit message 를 사용하게 된다.
'IT 기술 > 개발환경_유틸 관련 팁' 카테고리의 다른 글
[Python 개발환경] pip 설치/사용법 (3) | 2018.09.26 |
---|---|
[vim] tab 을 space 로 변환, [no]expandtab 관련 팁 (0) | 2018.08.29 |
[git/gerrit] gerrit 을 사용한 여러 project 함께 빌드 (0) | 2018.04.26 |
[RFC 2119] MAY, MAY NOT, SHALL, SHOULD 의 사용 (0) | 2017.03.03 |
[ubuntu] minicom 스크립트 실행하기 (0) | 2013.09.25 |