git commit --amend

Published: 09 May 2014 Category: git

你在使用git的过程中会不会遇到这么一种情况:刚刚进行了一个git commit(提交),但是突然发现上次提交中有个错误,所以要撤销上一次的提交,重新修改后再提交。也许你会说很简单,直接git reset HEAD~1不就行了吗?的确,但是我们这里要说的是git commit --amend。下面就结合实例说明一下:

1.新建一个目录git-test,初始化一下仓库,做一次简单的提交:

mkdir git-test
cd git-test/
git init
echo 1 > test
git add .
git commit -am "init"  

2.这个时候我们发现上次提交的内容中有个错误(‘1’应该是‘2’),需要修改后重新提交:

echo 2 > test
git add test

3.这时候我们来用git status看一下:

linux-geek:/home/tmp/git-test # git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   test
#  

4.如果这个时候我们键入git commit --amend,会出现什么情况呢?

linux-geek:/home/tmp/git-test # git commit --amend -m "init"
[master fffa52a] init
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 test  

这样子会把刚才

暂存区里面的内容替换前一次提交里的内容

而不是

作为一次新的提交。我们来看一下:

linux-geek:/home/tmp/git-test # git log
commit fffa52a68b9ccda6ff654573988ccc713280212c
Author: zhuqinggooogle <zhuqinggooogle@gmail.com>
Date:   Fri May 9 10:34:39 2014 +0800

    init  

这里只有一次提交记录。我们再来看一下提交后的内容是不是我们修改过的:

linux-geek:/home/tmp/git-test # git show HEAD:./test
2  

的确是的,毫无疑问。