3

我已经在我的仓库中编辑了一些文件并推送它们。
经过其他一些工作,我注意到我保留了一行评论。
所以,我不想为它创建一个新的提交,我想在上一次提交中更改它(不是最后一次提交)。
我认为我可以使用提交 ID,但我不知道 Git 如何或可能不容忍此功能。

4

2 回答 2

6

您可以在交互模式下进行变基:

git rebase -i HEAD~10

Git 将提示您提交提交列表,最旧的提交列表首先显示:

...
pick ab89k22 Old commit
pick ml9826x Another old commit
pick xke82ml This is the commit you want to edit
pick aow82md Here is your latest commit

找到您要编辑的提交,然后更改pickedit

edit xke82ml This is the commit you want to edit

然后保存文件并退出。Git 现在将开始 rebase 并在您要编辑的提交处停止,允许您进行更改。完成这些更改后,您可以键入

git add path/to/file

对于您修改的每个文件,然后键入

git rebase --continue

完成变基。

请注意,在本地分支上编辑此提交时,您已经有效地重写了历史记录。这意味着当你推送到远程时,你将不得不强制分支出来,--force在你的git push命令中使用:

git push origin master --force

请注意,重写远程历史记录可能很危险,具体取决于谁也与您共享此分支。

如果您不想重写远程历史记录,那么更安全的选择是向您的分支添加新的提交。您还可以使用 删除有问题的提交git revert,然后添加要保留的更改。

于 2016-01-18T10:01:47.020 回答
3

不!

正如蒂姆指出的那样:重写远程历史是危险的。

只需接受您犯了一个错误(并且在推送之前没有彻底测试您的代码),修复您的错误并使用该消息进行新的提交

amend <COMMIT_HASH_YOU_WANT_TO_FIX>

如果您使用的是半体面的历史查看器,它将生成一个链接,<COMMIT_HASH_YOU_WANT_TO_FIX>以便您可以轻松跳转到错误提交。

于 2016-01-18T10:34:11.717 回答