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

3

我已经编辑了代码库中的一些文件并将它们推送到了远程仓库。
在完成了其他工作之后,我注意到有一行代码被注释掉了。
因此,我不想为此创建新的提交记录,并希望能够在之前的提交记录中修改它(而不是最后一个提交记录)。
我认为可以使用提交记录的ID来实现这个目标,但我不知道如何操作,或者Git是否支持这个功能。


使用 git push 命令时,加上 -f 标志。 - 1615903
4
可能是重复的问题,与“如何将修改后的提交推送到远程Git仓库?”相似。 - 1615903
2个回答

6
您可以在交互模式下执行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删除相关提交,然后添加您想要保留的更改。


当我完成更改后执行“git rebase --continue”时,Git会显示“工作树已被修改”,并显示我的文件需要更新。 - craken
你需要添加你所修改的文件,就像平常工作时一样。不确定是否还需要提交。 - Tim Biegeleisen

4

不要这样做!

正如Tim所指出的那样:重写远程历史记录是危险的。

只需承认您犯了错误(在推送之前没有充分测试代码),修复错误并创建一个新的提交,带有消息

amend <COMMIT_HASH_YOU_WANT_TO_FIX>

如果你使用的是一个半靠谱的历史记录查看工具,它将会生成一个链接来代替<COMMIT_HASH_YOU_WANT_TO_FIX>,这样你就可以轻松跳转到有误的提交中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接