个人问题是我已经更改了一个文件,例如: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
使用--soft
而不是--hard
标志: app
git reset --soft HEAD^
若是您正处于提交的中间(即已在编辑器中),则能够经过删除第一个#
上方的全部行来取消它。 这将停止提交。 编辑器
所以,您能够删除全部行,以便提交消息为空,而后保存文件: 测试
而后,您将收到一条消息,指出Aborting commit due to empty commit message.
。 spa
编辑 : code
您也能够删除全部行,结果将彻底相同。 索引
要删除vim中的全部行(若是这是您的默认编辑器),一旦进入编辑器,键入gg
转到第一行,而后键入dG
删除全部行。 最后,使用wq
写入并退出文件,您的提交将被停止。
只需使用没有--hard
标志的git reset
:
git reset HEAD~1
PS:在基于Unix的系统上,你可使用等于HEAD~1
HEAD^
。 在Windows上, HEAD^
将没法工做,由于^
表示行继续。 因此你的命令提示符只会问你More?
。
使用下面的命令:$ git reset HEAD~1以后你还能够查看文件恢复以下面的响应。
重置后的未分级更改:M application / config / config.php M application / config / database.php
您能够经过使用如下参数之一告诉Git如何处理索引(将成为下一个提交的文件集)和工做目录:
--soft
:只会--soft
提交,而不会更改索引和工做目录。
--mixed
:这将重置索引以匹配HEAD,而不会触及工做目录。 全部更改都将保留在工做目录中并显示为已修改。
--hard
:它重置全部内容(提交,索引,工做目录)以匹配HEAD。
在您的状况下,我会使用git reset --soft
来保留您在Index和工做目录中修改的更改。 请务必查看此内容以获取更详细的说明。