已执行以下命令

git add <foo.java>
git commit -m "add the foo.java file"

我如何删除我的本地提交现在和取消foo.java?

如果我输入git reset——很难,我发现它会把我修改过的foo.java恢复到原来的。


当前回答

Git重置-软就是为了这个:它就像Git重置-硬,但不触及文件。

其他回答

对我来说,下面的方法更具可读性(因此更可取):

git reset HEAD~1

可以有任意数量的提交,而不是1。

Use:

git reset HEAD^

这做一个“混合”重置默认情况下,这将做什么你要求;将foo.java放入unstaging,删除最近的提交。

Git重置-软就是为了这个:它就像Git重置-硬,但不触及文件。

假设你想要取消n次提交的更改,

其中提交哈希如下:

h1 h2 ... hn hn + 1

然后执行如下命令: Git重置hn

现在HEAD是hn+1。从h1到hn的更改将是不分段的。

git重置-软头~1应该做什么你想要的。在此之后,您将在索引中看到第一次更改(通过git diff—cached可见),并且您的最新更改不是阶段性的。Git状态将如下所示:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   foo.java
#
# 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:   foo.java
#

然后你可以执行git add foo.java,并一次性提交两个更改。