【问题标题】:Undo git mv (rename)撤消 git mv(重命名)
【发布时间】:2011-06-21 15:04:22
【问题描述】:

在 git 中撤消重命名的正确方法是什么,例如:

git mv file1 file2

【问题讨论】:

  • 厚脸皮的回答:git mv file2 file1
  • @CanSpice:这是正确的答案;没有什么厚脸皮的。
  • @Charles:那么,我提供了它作为一个适当的非厚颜无耻的答案。 :-)
  • git mv file2 file1 你还期待什么?

标签: git rename undo mv


【解决方案1】:

不厚脸皮的回答:

git mv file2 file1

自动更新旧路径和新路径的索引。

查看git mv的文档

【讨论】:

  • 假设 file1 和 file2 都在当前目录 (.) 中,那么为什么 git checkout . 不起作用,即使使用 -f 选项?
  • 像这样直观的事情似乎很少见 :)
  • @ryenus 你需要使用git checkout -- .
  • 大声笑。这很有趣。
  • 没有为我提供错误:fatal: source directory is empty,,只有git reset --hard 完成了这项工作。
【解决方案2】:

如果自上次提交以来您没有进行任何其他更改(您想保留),您可以这样做

git reset --hard

【讨论】:

  • 我不想养成使用git reset --hard 的习惯。对我来说,只是向后移动它似乎是一个更安全的选择。
  • 为我工作。我想撤消 1)尚未提交的“git mv”,以及 2)我没有其他更改
  • 如果您有其他想要保留的更改,这将销毁所有更改。
【解决方案3】:
git reset HEAD file2

帮我搞定了

【讨论】:

  • 我对这个答案的唯一问题是它在磁盘上留下了 file2 的副本。
  • 还留下 file1 待删除。
【解决方案4】:

就我而言,我移动了整个文件夹,然后意识到我不应该这样做。

我真的很喜欢@Dave Konopka 的回答,但我用这种方法并没有取得太大的成功(也许我的 GIT 版本(1.8.4)?我的文件仍然显示为已删除。我在堆栈上做了其他更改不想输(很遗憾)。

我确实成功了:

git reset moved_folder
git checkout original_folder

【讨论】:

    【解决方案5】:

    这取决于你想要完成什么。如果您希望它看起来好像文件从未移动过,那么您可以重置(或变基)回到移动之前。如果你不关心历史,那就把它移回去。

    【讨论】:

    • 第一个工作正常,只要你没有推送你的提交,或者有人没有从你那里撤走。
    【解决方案6】:

    如果您不小心重命名了大量文件并想回到您开始的位置,请删除所有在 git status 调用下显示为 adds 的重命名文件。

    删除所有更改的文件后,您可以运行git checkout -- * 以在本地取回原始文件名。

    【讨论】:

      【解决方案7】:
      git reset HEAD file2
      git checkout -- file1
      rm file2
      

      第一个命令取消暂存 file2,但保留它的副本。第二条命令恢复原文件,第三条删除新文件。

      【讨论】:

        【解决方案8】:

        我使用的技巧是使用 git stash 撤消所有更改(包括恢复 mv'd 文件),然后使用 git stash drop 删除存储。

        【讨论】:

          【解决方案9】:

          不那么可怕的是转到 repo 的顶层并执行以下操作:

          git 重置
          结帐。

          【讨论】:

          • 警告:这将取消所有更改,而不仅仅是 'git mv'
          猜你喜欢
          • 1970-01-01
          • 2019-03-18
          • 1970-01-01
          • 2018-05-30
          • 2012-11-21
          • 1970-01-01
          • 2018-03-16
          • 2021-11-03
          相关资源
          最近更新 更多