如何在先前的提交中更改文件名

时间:2017-11-01 11:42:12

标签: git

我已经完成了五次提交并且还没有推送,我发现我在第一次提交时出错,所以我想在我尝试的第一次提交中更改文件名。

git reset  --soft HEAD^
git reset HEAD path/to/file
git mv oldName NewName
git commit --amend

但是这会创建一个新的提交,如何在之前的提交中更改文件名?

3 个答案:

答案 0 :(得分:1)

假设提交为A-B-C-D-EA是第一个。

git reset A --hard
git mv oldName newName
git commit --amend --no-edit
git cherry-pick A..E

5次提交的sha1值将是新的。实际上,创建了5个新提交,并且分支远离旧E并指向新的E。如果您忘记旧E的内容,可以运行git reflog来查找它。或者您可以事先在旧E上创建一个新分支,并在作业完成后将其删除。当您知道旧的E是什么时,git log E会告诉ABCD是什么。

如果BCDE中的任何一个在重命名之前触摸了该文件,那么当您挑选该提交时,您将遇到冲突。假设BD触及重命名的文件,但CE没有。然后运行以下命令而不是git cherry-pick A..E

git format-patch -1 B
git format-patch -1 D
#Two *.patch files are created. 
#Open and edit the *.patch, change the oldName to the newName in them.
git am <edited-B.patch>
git cherry-pick C
git am <edited-D.patch>
git cherry-pick E
rm *.patch

答案 1 :(得分:0)

您可以使用git rebase -i HEAD^^然后r重命名提交。

答案 2 :(得分:0)

我尝试并运作的解决方案:

git rebase -i HEAD~5
git mv oldeNAme.ext NEWNAME.ext
git commit --amend
git rebase --continue