如何取消本地git提交

个人问题是我已经更改了一个文件,例如:README, 为个人测试行添加了一行新 '并保存了文件,而后我发出了如下命令 php

git status

 # On branch master
 # Changed but not updated:
 #   (use "git add <file>..." to update what will be committed)
 #   (use "git checkout -- <file>..." to discard changes in working directory)
 #
 #  modified:   README
 #
 no changes added to commit (use "git add" and/or "git commit -a")


 git add README

 git commit -a -m 'To add new line to readme'

我没有将代码推送到github,如今我想取消这个提交。 git

为此我用过 github

git reset --hard HEAD~1

可是我从README文件中丢失了新增的“ 个人测试行 ”。 这不该该发生。 我须要内容。 有没有办法保留内容并取消个人本地提交? vim


#1楼

使用--soft而不是--hard标志: app

git reset --soft HEAD^

#2楼

若是您正处于提交的中间(即已在编辑器中),则能够经过删除第一个#上方的全部行来取消它。 这将停止提交。 编辑器

所以,您能够删除全部行,以便提交消息为空,而后保存文件: 测试

它看起来应该是这样的。

而后,您将收到一条消息,指出Aborting commit due to empty commit message.spa

编辑code

您也能够删除全部行,结果将彻底相同。 索引

要删除vim中的全部行(若是这是您的默认编辑器),一旦进入编辑器,键入gg转到第一行,而后键入dG删除全部行。 最后,使用wq写入并退出文件,您的提交将被停止。


#3楼

只需使用没有--hard标志的git reset

git reset HEAD~1

PS:在基于Unix的系统上,你可使用等于HEAD~1 HEAD^ 。 在Windows上, HEAD^将没法工做,由于^表示行继续。 因此你的命令提示符只会问你More?


#4楼

使用下面的命令:$ git reset HEAD~1以后你还能够查看文件恢复以下面的响应。

重置后的未分级更改:M application / config / config.php M application / config / database.php


#5楼

您能够经过使用如下参数之一告诉Git如何处理索引(将成为下一个提交的文件集)和工做目录:

--soft :只会--soft提交,而不会更改索引和工做目录。

--mixed :这将重置索引以匹配HEAD,而不会触及工做目录。 全部更改都将保留在工做目录中并显示为已修改。

--hard :它重置全部内容(提交,索引,工做目录)以匹配HEAD。

在您的状况下,我会使用git reset --soft来保留您在Index和工做目录中修改的更改。 请务必查看此内容以获取更详细的说明。