我的问题是我已经更改了一个文件,例如:README,添加了一个新行'this for My testing line'并保存了文件,然后我发出了以下命令:

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 reset --hard HEAD~1

但是我从README文件中丢失了新添加的行“this for my testing line”。 这种情况不应该发生。我需要内容在那里。是否有一种方法可以保留内容并取消本地提交?


当前回答

只需要使用git reset而不使用——hard标志:

git reset HEAD~1

PS:在基于Unix的系统上,你可以使用HEAD^,它等于HEAD~1。在Windows上,HEAD^将不起作用,因为^表示行继续。所以你的命令提示符会问你More?

其他回答

只需要使用git reset而不使用——hard标志:

git reset HEAD~1

PS:在基于Unix的系统上,你可以使用HEAD^,它等于HEAD~1。在Windows上,HEAD^将不起作用,因为^表示行继续。所以你的命令提示符会问你More?

使用以下命令:

$ git reset HEAD~1

在此之后,您还可以查看文件恢复如下响应。

Unstaged changes after reset:
M   application/config/config.php
M   application/config/database.php

使用——软旗而不是——硬旗。

Unix:

git reset --soft HEAD^

窗口:

git reset --soft HEAD~

它将删除最后一次本地(未推送的)提交,但将保留您所做的更改。

你可以告诉Git在执行Git重置时如何处理你的索引(将成为下一次提交的文件集)和工作目录:

——soft:只有提交会被重置,而索引和工作目录不会被改变。

——mixed:这将重置索引以匹配HEAD,而工作目录将不会被触及。所有更改都将保留在工作目录中,并显示为已修改。

——hard:它重置所有内容(提交、索引、工作目录)以匹配HEAD。

在你的情况下,我会使用git reset -soft来保存你在索引和工作目录中修改的更改。一定要查看这个以获得更详细的解释。

正如@Amal Kumar所说。只需使用git命令:

git reset HEAD~1