撤消git mv(重命名)


139

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

git mv file1 file2

21
厚脸皮的答案:git mv file2 file1
CanSpice

@CanSpice:那是正确的答案;一点也不厚颜无耻。
CB Bailey

1
@Charles:那么,我已经将其作为适当的非粗俗的答案提供了。:-)
CanSpice

git mv file2 file1您还需要其他功能吗?
Lakshman Prasad

Answers:


230

非厚脸皮的答案:

git mv file2 file1

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

检查git mv的文档


4
假设file1和file2都在当前目录(。)中,那么git checkout .即使使用该-f选项,也为什么不起作用?
ryenus

9
事情如此直观似乎很罕见:)
ragerdl

@ryenus您需要使用git checkout -- .
Joseph238

大声笑。这很有趣。
Dmitriy Dokshin

给出错误对我不起作用:fatal: source directory is empty,,仅git reset --hard完成了工作。
mac13k

43

如果自上次提交以来未进行任何其他更改(要保留),则可以执行

git reset --hard

6
我不想养成使用的习惯git reset --hard。对我来说,只是将其向后移动似乎是一个更安全的选择。
osa

4
为我工作。我想撤销一个“ git mv”,它表示1)尚未提交,2)我没有其他修改
山之Ed

如果您要保留其他更改,则将所有这些更改销毁。
user151841

13
git reset HEAD file2

为我做了把戏


1
我对此答案的唯一问题是,它在磁盘上留下了file2的副本。
user52472

9

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

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

我确实取得了成功:

git reset moved_folder
git checkout original_folder

8

这取决于您要完成的工作。如果您希望它看起来像文件从未被移动过,则可以将其重置(或变基)为移动之前的状态。如果您不关心历史,则只需将其移回即可。


4
只要您没有推动提交,或者没有从您那里拉走,第一个就可以正常工作。
CanSpice

7

如果您不小心重命名了许多文件,并想回到开始的位置,请删除所有显示addsgit status通话中的重命名文件。

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


4
git reset HEAD file2
git checkout -- file1
rm file2

第一个命令取消暂存file2,但保留其副本。第二个命令还原原始文件,第三个命令删除新文件。


1

我使用的技巧是执行git stash撤消所有更改(包括还原mv'd文件),然后使用git stash drop删除该stash。


0

不太害怕的是转到仓库的顶层并执行以下操作:

git重置
git checkout。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.