如何将修改后的提交推送到特定提交的远程git仓库

时间:2016-01-18 09:56:38

标签: git github git-commit amend

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

2 个答案:

答案 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>之外的链接,这样你就可以轻松跳转到错误的提交。