我已经对不同的文件进行了多次提交,但到目前为止,我只想将一个特定的提交推到远程存储库。
这可能吗?
我已经对不同的文件进行了多次提交,但到目前为止,我只想将一个特定的提交推到远程存储库。
这可能吗?
当前回答
其他答案缺乏对重新排序的描述。
git push <remotename> <commit SHA>:<remotebranchname>
会推送一个单独的提交,但这个提交必须是你本地的,非推送的,提交中最古老的,不要与top, first或tip commit混淆,在我看来,这些都是模糊的描述。提交需要到你的最老的提交,即离你最近的提交最远的提交。如果它不是最老的提交,那么所有从最老的、本地的、未推送的SHA到指定SHA的提交都将被推送。要重新排序提交,请使用:
git rebase -i HEAD~xxx
在重新排序提交之后,您可以安全地将其推到远程存储库。
总结一下,我用了
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:复制提交后,本地Rebase然后拉 git:推送单次提交,用rebase重新排序,重复提交
其他回答
我相信你将不得不“git还原”到那个提交,然后推送它。或者您可以挑选一个提交到一个新的分支,并将其推到远程存储库上的分支。喜欢的东西:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
要执行给定的提交,你可以这样写:
git push <remotename> <commit SHA>:<remotebranchname>
前提是<remotebranchname>在远程端已经存在。(如果没有,你可以使用git push <remotename> <commit SHA>:refs/heads/<remotebranchname>来自动创建它。)
如果你想要推送一次提交而不推送之前的提交,你应该首先使用git rebase -i来重新排序提交。
我建议使用git rebase -i;将要推入的提交移到已提交的提交的顶部。然后使用git log来获取重基提交的SHA,检出并推送它。rebase将确保所有其他提交现在都是您所推送的提交的子提交,因此未来的推送也将正常工作。
与所有其他方法相比,Cherry-pick在推动特定提交时工作得最好。
这样做的方法是:
创建一个新的分支-
git branch <new-branch>
用你的原始分支-更新你的新分支
git fetch
git rebase
这些操作将确保你拥有与原点完全相同的物质。
选择你想要做推送的sha id
git cherry-pick <sha id of the commit>
你可以通过跑步来获得sha
git log
把它推到原点
git push
运行gitk,看看一切都像你想要的那样。
其他答案缺乏对重新排序的描述。
git push <remotename> <commit SHA>:<remotebranchname>
会推送一个单独的提交,但这个提交必须是你本地的,非推送的,提交中最古老的,不要与top, first或tip commit混淆,在我看来,这些都是模糊的描述。提交需要到你的最老的提交,即离你最近的提交最远的提交。如果它不是最老的提交,那么所有从最老的、本地的、未推送的SHA到指定SHA的提交都将被推送。要重新排序提交,请使用:
git rebase -i HEAD~xxx
在重新排序提交之后,您可以安全地将其推到远程存储库。
总结一下,我用了
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:复制提交后,本地Rebase然后拉 git:推送单次提交,用rebase重新排序,重复提交