我已经在我的仓库中编辑了一些文件并推送它们
经过其他一些工作后,我注意到我一直在评论
所以,我不想为它创建一个新的提交,我想在之前的提交中更改它(不是最后一次提交)。
我认为我可以使用提交ID,但我不知道Git不能容忍这个功能。
答案 0 :(得分:4)
您可以在交互模式下执行rebase:
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
找到您要修改的提交,并将pick
更改为edit
:
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
删除相关提交,然后添加要保留的更改。
答案 1 :(得分:3)
不要!
Tim指出:重写远程历史很危险。
简单地接受你犯了一个错误(并且在推送之前没有彻底测试你的代码),修复你的错误并使用消息进行新的提交
amend <COMMIT_HASH_YOU_WANT_TO_FIX>
如果你正在使用一个半正式的历史查看器,它将生成<COMMIT_HASH_YOU_WANT_TO_FIX>
之外的链接,这样你就可以轻松跳转到错误的提交。