协慌网

登录 贡献 社区

如何将特定提交推送到远程,而不是之前的提交?

我已经对不同的文件做了几次提交,但到目前为止,我想将我的远程存储库推送到特定的提交。

那可能吗?

答案

通过指定的提交推 ,你可以这样写:

git push <remotename> <commit SHA>:<remotebranchname>

提供<remotebranchname>已存在于遥控器上。 (如果没有,你可以使用git push <remotename> <commit SHA>:refs/heads/<remotebranchname>来自动创建它。)

如果要在推送先前提交的情况下推送提交,则应首先使用git rebase -i重新提交提交。

尝试了建议的解决方案:

git push <remotename> <commit SHA>:<remotebranchname>

像这样:

git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master

在我的情况下,master 提前 5 次提交,我只是想推送我的最后一次提交,但上面最终将我的所有更改推送到包括命名提交。在我看来,樱桃挑选方法可能是这个用例的更好方法。

其他答案缺少重新排序的描述。

git push <remotename> <commit SHA>:<remotebranchname>

将推送单个提交,但该提交必须是您的本地,非推送,提交的 OLDEST,不要与 top,first 或 tip 提交混淆,在我看来这些都是模棱两可的描述。提交需要最早的提交,即距离您最近的提交最远的提交。如果它不是最早的提交,则将推送从最旧的,本地的,未推送的 SHA 到指定的 SHA 的所有提交。要重新排序提交使用:

git rebase -i HEAD~xxx

重新排序提交后,您可以安全地将其推送到远程存储库。

总结一下,我用过

git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master

将单个提交推送到我的远程主分支。

参考文献:

  1. http://blog.dennisrobinson.name/push-only-one-commit-with-git/
  2. http://blog.dennisrobinson.name/reorder-commits-with-git/

也可以看看:

  1. git:在本地 Rebase 之后重复提交 Pull
  2. git:推送单一提交,重新排序,重复提交