git:推送单个提交

ax6ht2ek  于 2022-11-20  发布在  Git
关注(0)|答案(4)|浏览(414)

假设我做了几个提交,并希望挑选出哪些提交推送到远程仓库。C1-〉C2-〉C3-〉C4,我想推C2和C4)。重新排序,重置,推,然后重置工作吗?(C1-〉C2-〉C3-〉C4 =〉C2-〉C4-〉C1-〉C3 =〉重置C4 =〉推=〉重置C3)。有更好的方法吗?

31moq8wy

31moq8wy1#

您可能正在寻找:

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”)是您推送 * 到 * 的分支-远程分支。它不必与本地分支相同。
  • 如果你需要从本地获取提交,你可以使用cherry-pick方法(midtiby建议的)先把它们移到一个单独的本地分支上。但是,如图所示,为了推送到远程分支,并不需要创建一个本地分支。如果你对提交的推送位置很谨慎,你可以同时在多个分支上工作。

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

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

作为这个主题的一个变体,删除一个远程分支可以被认为是向它推送no commit:

git push origin :$branch

专业提示:git-revise是一个在推送前将你的提交栈处理成合适的形状的工具。它有一个类似于git rebase的接口。这个工具是不可替代的(如果我错了,请纠正我),用于足够困难的提交解缠工作,尽管它的接口急需更换。

gpnt7bae

gpnt7bae2#

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

lnlaulya

lnlaulya3#

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

# Example:
$ git push origin 2dc2b7e393e6b712ef103eaac81050b9693395a4:master
eeq64g8w

eeq64g8w4#

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

相关问题