我如何推送一个特定的提交到远程,而不是以前的提交?

我已经对不同的文件进行了几次提交,但是到目前为止,我只想推送到我的远程存储库只有一个具体的提交。

那可能吗?

通过一个特定的提交,你可以写:

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

提供的<remotebranchname>已经存在于远程。 (如果没有,你可以使用git push <remotename> <commit SHA>:refs/heads/<remotebranchname>来自动创build它。)

如果你想在推动提交的情况下推送一个提交,你应该首先使用git rebase -i重新sorting提交。

编辑

以更完整的描述做什么检查@塞缪尔的回答: https : //stackoverflow.com/a/27907287/889213

参考文献:

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

试过build议的解决scheme:

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

喜欢这个:

git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master

在我的情况下,主人5提交提交,我只是想推我的最后一次提交,但上述结束了推动我所有的变化,包括指定的提交。 在我看来,樱桃挑选方法可能是一个更好的方法来处理这个用例。

其他答案缺乏重新sorting的描述。

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

将会推送一个单独的提交,但是这个提交必须是你的本地非推送提交的最旧版本,不要与顶层,第一个或提示提交混淆,这在我看来都是含糊不清的描述。 提交需要最长的提交,即离最近的提交最远。 如果它不是最老的提交,那么从最旧的本地非推送SHA到指定的SHA的所有提交将被推送。 要对提交进行重新sorting,请使用:

 git rebase -i HEAD~xxx 

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

总结一下,我用了

 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:在本地再次访问之后重复提交
  2. git:推进单提交,重新sorting,重复提交

我build议使用git rebase -i ; 将您想要推送的提交移动到您提交的提交的顶部。 然后使用git log来获取重定义的提交的SHA,检查出来,然后推送它。 rebase将确保你所有的其他提交现在都是你推送的那个提交的subprocess,所以未来的推送也可以正常运行。

樱桃select与所有其他方法相比效果最好,同时推送特定的提交。

做到这一点的方法是:

创build一个新的分支 –

 git branch <new-branch> 

更新您的新分支与您的起源分支 –

 git fetch git rebase 

这些行动将确保你有完全相同的东西,你的来源。

樱桃挑选您想要推的sha id

 git cherry-pick <sha id of the commit> 

你可以通过运行来获得sha id

 git log 

推它到你的起源 –

 git push 

运行gitk ,看看一切都看起来像你想要的。

我相信你将不得不“回头”回到那个提交,然后推它。 或者你可以cherry-pick一个提交到一个新的分支,并推送到远程回购分支。 就像是 :

 git branch onecommit git checkout onecommit git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch git push origin {branch}