我如何推送一个特定的提交到远程,而不是以前的提交?
我已经对不同的文件进行了几次提交,但是到目前为止,我只想推送到我的远程存储库只有一个具体的提交。
那可能吗?
要通过一个特定的提交,你可以写:
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
参考文献:
试过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
把一个提交到我的远程主分支。
参考文献:
- http://blog.dennisrobinson.name/push-only-one-commit-with-git/
- http://blog.dennisrobinson.name/reorder-commits-with-git/
也可以看看:
- git:在本地再次访问之后重复提交
- 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}