繁体   English   中英

git:推送一次提交

[英]git: push a single commit

假设我做了几次提交,并希望挑选我推送到远程存储库的那些。 我该怎么做(在 ascii 中:C1->C2->C3->C4,我想推送 C2 和 C4)。 使用 rebase、reset、push 和 reset 重新排序是否有效? (C1->C2->C3->C4 => C2->C4->C1->C3 => 重置 C4 => 推 => 重置 C3)。 有更好的方法吗?

您可能正在寻找:

git push origin $commit:$branch

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

解释性说明:

  • 推送提交会推送它之前的所有提交(如 Amber 所说)。 关键是首先重新排序您的提交( git rebase -i ),以便它们按照您要推送的顺序排列。
  • $commit不必是 sha1。 例如,“HEAD~N”会在最后 N 次提交之前推送所有内容。
  • $branch (通常是“master”或“main”)是你推送到的分支——远程分支。 它不必与本地分支相同。
  • 建议的分支 + 樱桃挑选方法(由 midtiby 建议)也有效,但为了重新排序(例如首先获取预工作),这避免了创建一次性分支。

如果分支不远程存在,而您想创建它,则必须以refs/heads/为前缀(以消除分支与标签的歧义):

git push origin $commit:refs/heads/$new_branch

专业提示: git-revise是一个类似但比git rebase更好的工具(特别是对于本地提交)。 出于我的目的,作为一个日常 git 用户,我认为如果你经常使用git revise -i应该是必须的(这对于产生高质量的提交当然是非常必要的)。

如果您在私有分支上有提交,则可以从私有分支中挑选提交并将它们应用到官方分支。 此时,您现在可以将所有提交推送到官方分支(这是您之前精心挑选的子集)。

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

# Example:
$ git push origin 2dc2b7e393e6b712ef103eaac81050b9693395a4:master

IIRC,由于 git 考虑提交工作的方式,C4 固有地包含 C3,因此“推 C4 但不推 C3”的概念对 git 没有意义(同样 C2 相对于 C1)。 (请参阅上一个问题的答案。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM