我已经完成了五次提交并且还没有推送,我发现我在第一次提交时出错,所以我想在我尝试的第一次提交中更改文件名。
git reset --soft HEAD^
git reset HEAD path/to/file
git mv oldName NewName
git commit --amend
但是这会创建一个新的提交,如何在之前的提交中更改文件名?
答案 0 :(得分:1)
假设提交为A-B-C-D-E
,A
是第一个。
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
中的任何一个在重命名之前触摸了该文件,那么当您挑选该提交时,您将遇到冲突。假设B
和D
触及重命名的文件,但C
和E
没有。然后运行以下命令而不是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