【问题标题】:Undo a git reset file command撤消 git 重置文件命令
【发布时间】:2019-03-18 02:10:38
【问题描述】:

我刚刚运行了这个命令:

 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 reset。

【问题讨论】:

标签: git git-reset


【解决方案1】:

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

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

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

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

更新:我想我应该这样做git checkout origin/dev -- package-lock.json

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

无论如何,如果你的意思,你可以现在就做,覆盖你之前停留在索引中的任何东西,也覆盖工作树副本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 2016-04-23
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多