git:推送一个提交

时间:2009-11-24 09:46:09

标签: git

说我做了几次提交,并希望能够选择哪些推送到远程存储库。我该怎么做(在ascii中:C1-> C2-> C3-> C4,我想推C2和C4)。是否会重新订购rebase,重置,推送然后重置工作? (C1-> C2-> C3-> C4 => C2-> C4-> C1-> C3 =>重置C4 => push =>重置C3)。有更好的方式吗?

4 个答案:

答案 0 :(得分:64)

您在寻找什么:

git push origin commit-id:master

信用证转到:http://blog.dennisrobinson.name/push-only-one-commit-with-git/

解释性说明:

  • 提交提交会推送所有提交(如Amber所说)。该 关键是首先重新排序您的提交(git rebase -i),所以它们是 按照你想要推动它们的顺序。
  • 建议的分支+樱桃挑选方法(由midtiby建议) 也适用,但为什么在你不需要时创建一次性分支。
  • commit-id不一定是sha1。在推动之前推动一切 最后N次提交,使用“HEAD~N”代替commit-id

如果要推送到远程存储库中不存在的分支,请在远程分支前添加refs/heads/,例如:

git push origin HEAD~1:refs/heads/completely-new-branch

(如果没有,git会用this hopeless error message惩罚你。)

答案 1 :(得分:22)

如果您在私人分支机构上提交了您的提交,您可以从私人分支机构挑选提交并将其应用于官方分支机构。此时,您现在可以将所有提交推送到官方分支(这是您之前选择的子集)。

答案 2 :(得分:7)

$ git push <remote name> <commit hash>:<remote branch name>

# Example:
$ git push origin 2dc2b7e393e6b712ef103eaac81050b9693395a4:master

答案 3 :(得分:3)

IIRC,由于git如何考虑提交工作,C4固有地包含C3,因此“推C4而不是C3”的概念对git没有意义(同样C2相对于C1)。 (参见this previous question的答案。)