Heesung Yang

[명령어] git commit

commit 취소

# 최종 커밋을 취소. 워킹트리는 보존됨. (커밋은 했으나 push하지 않은 경우 사용)
~$ git reset HEAD^

# 마지막 2개의 커밋을 취소. 워킹트리는 보존됨.
~$ git reset HEAD~2

# 마지막 2개의 커밋을 취소. index 및 워킹트리 모두 원복됨.
~$ git reset --hard HEAD~2

# 머지한 것을 이미 커밋했을 때, 그 커밋을 취소. (잘못된 머지를 이미 커밋한 경우 유용)
~$ git reset --hard ORIG_HEAD

# HEAD에서 변경한 내역을 취소하는 새로운 커밋 발행(undo commit). (커밋을 이미 push 해버린 경우 유용)
~$ git revert HEAD

# 마지막 commit 메시지 수정
~$ git commit --amend

# commit 시 diff 내용 출력
~$ git commit -v

# commit 합치기
# 마지막 2개의 commit 을 하나로 합치기 위한 창이 뜸
#
#   pick 509d675 Add svn-ssl-error-centos
#   pick 3312e8c change kor to eng
#
# 두 번째 라인의 `pick` 을 `squash` 로 변경하고 저장하면 commit msg 수정하는 단계로 넘어가고 commit msg 수정 후 저장하면 완료
~$ git rebase -i HEAD~2

# commit 나누기
# 마지막 2개의 commit 중 나누고 싶은 commit 을 `edit` 로 변경
#
#   pick 509d675 Add svn-ssl-error-centos
#   edit 3312e8c change kor to eng   <<< edit 로 변경
#
# `git reset HEAD^` 명령어로 unstage 시킴
# commit 하고 싶은 내용만 골라서 add 후 commit -> commit 1개 생성
# 위 과정 반복
# commit 완료 후 `git rebase --continue` 명령어로 종료
~$ git rebase -i HEAD~2

특정 branch의 commit만 골라서 master branch에 merge 하기 (Cherry-pick)

  • new-feature 브랜치의 일부 commit 만 master 에 적용
# checkout to new-feature
~$ git checkout new-feature
~$ git log
f0607f24c104b01b9dd2b603bf3c4aa25f90386a commit meesage 2 # <- merge 하고 싶은 commit
10d84f621e027a59b0c27a255f891aa4c078b06c commit message 1

~$ git checkout master
~$ git cherry-pick f0607f24c104b01b9dd2b603bf3c4aa25f90386a

commit 작성자 수정

# rebase 모드 진입, 수정하고자 하는 commit의 pick 부분을 edit로 변경
~$ git rebase -i origin/master

# 매 commit 마다 변경 후 continue. 반복
~$ git commit --amend --author="Heesung Yang <someone@example.com>"
~$ git rebase --continue

commit 변경사항 보기

# git show <commit id>
~$ git show 07d2fca