git으로 commit을 하고 나고 보면 가끔 빼먹은 것이 있을 때 다시 commit하기가 애매합니다.

동일한 내용으로 서버에 commit을 두번하기가 눈치 보일수도 있죠.

이럴때는 --amend 옵션으로 이전에 했던 commit을 취소하고 수정할 수 있습니다.


git commit --amend -a -m "메시지"

여기서 -a는 수정된 파일들을 자동으로 add하는 옵션이고 -m은 커밋 메시지입니다


예를 들어 보겠습니다. 간단히 README파일에 라인을 하나 추가했습니다.

git status를 보면 수정된 것이 있다고 표시됩니다.


$ git status

On branch uboot-falinux-imx6

Your branch is up-to-date with 'origin/uboot-falinux-imx6'.


Changes not staged for commit:

  (use "git add <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)


modified:   README-falinux.txt


no changes added to commit (use "git add" and/or "git commit -a")


여기서 바로 커밋을 해보겠습니다. -a를 하면 자동으로 수정된 파일들이 add까지 됩니다.


$ git commit -a -m "commit 1"

[uboot-falinux-imx6 2da7c84] commit 1

 1 file changed, 1 insertion(+)


수정사항이 일단 commit되었습니다.

이번에는 다른파일에  다른 수정사항을 일부러 만들고 status합니다. 


$ git status

On branch uboot-falinux-imx6

Your branch is ahead of 'origin/uboot-falinux-imx6' by 1 commit.

  (use "git push" to publish your local commits)


Changes not staged for commit:

  (use "git add <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)


modified:   make-imx6.sh


no changes added to commit (use "git add" and/or "git commit -a")


그러면 처음에 했던 commit 1을 지우고 commit 2로 수정합니다. 아래처럼 입력합니다.


$ git commit --amend -a -m "commit 2"

[uboot-falinux-imx6 63540b0] commit 2

 2 files changed, 2 insertions(+), 1 deletion(-)


최종적으로 2개의 파일이 수정되었다고 나옵니다. 그리고 push하면 됩니다.


$ git push


이렇게 해서 git log를 보면 최종 commit은 두번째 것만 업로드 되고 처음 commit은 버려집니다.
$ git log
commit 63540b0a4604f1f50810f7bcd4e46107a996e62e
Author: Sangmin <simon@falinux.com>
Date:   Thu Dec 11 12:51:38 2014 +0900

    commit 2

commit 44482459bbf431588642c7ea5cc015e6b5a7ef35
Author: Sangmin <simon@falinux.com>
Date:   Fri Dec 5 14:47:40 2014 +0900

    test jenkins 3

단 push를 해서 이미 서버에 올렸다면 commit 수정이 안됩니다.