撤消 git 重置文件命令

Undo a git reset file command

我只是 运行 这个命令:

 git reset origin/dev -- package-lock.json 

但我想撤消它,我想返回:

 git reset HEAD -- package-lock.json 

但我认为返回 HEAD 可能为时已晚...如何撤消原始命令?

也许:

 git reset HEAD^ -- package-lock.json 

?

更新:我想我是想做 git checkout origin/dev -- package-lock.json,而不是 git 重置。

git reset <em>commit</em> -- <em>path</em> 表示:将文件 pathcommit 复制到索引中。

您无法撤消此操作,因为它会覆盖该路径索引中的任何文件。

幸运的是,您很少需要撤消此操作,因为索引中的副本可能也在其他地方。如果是这样,只需将 that 复制到索引中即可。通常,索引中任何文件的副本本身就是其他文件的副本:通过 git checkout 提取的已提交文件的副本,或通过 [ 添加的工作树文件的副本=13=].

如果索引中的副本在其他任何地方都不存在,那你就不走运了。但这通常只发生在 git add --patchgit reset --patch.

Update: I think I meant to do git checkout origin/dev -- package-lock.json

这意味着:将文件package-lock.jsonorigin/dev标识的提交复制到索引中,然后将索引版本复制到工作树中。git reset 一样,这会覆盖之前索引中的任何内容,并且该部分无法撤消。成功覆盖索引版本后,它还会将文件提取到工作树中,覆盖工作树中的任何内容。这也无法撤消 - 而且您拥有先前在工作树中拥有的内容的副本的可能性 较少。因此,使用这种 git checkout 比使用上述 git reset.

要更加小心

无论如何,如果 您的意思,您现在就可以这样做,覆盖之前卡在索引中的任何内容,并覆盖工作树副本。