【问题标题】:Push a commit in two branches with Git使用 Git 在两个分支中推送提交
【发布时间】:2011-04-30 18:14:52
【问题描述】:

如何在两个分支中推送提交?

我不能使用“git push”,因为它会推送到三个分支,我只想在其中两个分支中提交..

我在分支 B 中尝试了“git merge HEAD --commit id from branch A--”,但随后它从分支 A 获取所有内容并与分支 B 合并。我只想要最后一次提交,而不是其他所有内容合并B支线。

有人知道该怎么做吗?

【问题讨论】:

  • 下一次,在不同的分支上进行提交,从分支 A 和 B 的共同祖先开始。这样你可以将它合并到两者中,而不是在历史记录中出现重复的提交。

标签: git branch push


【解决方案1】:

简答

您可以使用cherry-pick 命令将已经存在的提交应用到另一个分支,然后使用git push origin branchA branchB 推送两个分支。


为什么在两个分支中推送一个提交可能很有用

假设您有一个具有这种结构的存储库:

A--B--C--D  ← master ← HEAD
      \--E  ← v1-release

经过一些开发(提交ABC)项目发布并创建了v1-release分支(这样v1可以支持错误修复,下一个版本可以在master开发) .提交E 用于指定版本信息(添加的发行说明等)。提交D引入了新功能,计划在下一个版本中出现,不应出现在v1-release中。

现在,如果在v1-release中发现了一个bug,必须在两个分支中修复它,这样用户才能继续使用v1,并且它不会出现在下一个版本中。

修复master 中的错误后,存储库应如下所示:

A--B--C--D--F  ← master ← HEAD
      \--E     ← v1-release

现在必须将带有错误修复的提交 F 应用于 v1-release 分支。

实际操作方法

不能完全复制提交(因为提交是目录保存状态),但您可以将提交中所做的更改应用到另一个提交。

cherry-pick 命令正是这样做的。它将指定提交所做的更改应用于当前分支,创建新提交:

git checkout v1-release
git cherry-pick F

在此之后,存储库应如下所示:

A--B--C--D--F  ← master
      \--E--G  ← v1-release ← HEAD

提交G 引入了与F 相同的更改。

您可能必须解决冲突(就像合并后一样)。

错误信息

之前的樱桃采摘现在是空的......

表示由cherry-picked 提交所做的更改已经存在于当前分支中。您可能忘记签出正确的分支。

如果出现错误或冲突,可以使用git cherry-pick --abort 中止cherry-pick。

最后,您可以返回master 分支并将两个分支推送到远程存储库:

git checkout master
git push origin master v1-release

最终的存储库结构:

A--B--C--D--F  ← master ← HEAD
      \--E--G  ← v1-release

【讨论】:

  • 将一个本地分支推送到两个远程分支呢?有没有捷径可以做到这一点?
  • cherry-pick 命令的示例将有助于说明在上下文中的使用并避免需要消化一页文档。我们中的一些人不能像其他人那样轻松地进行 RTFM.. :)
【解决方案2】:

试试这个:

git push origin <commitId>:<brancnName_1>
git push origin <commitId>:<brancnName_2>

它对我有用。

【讨论】:

  • 这很奇怪,我这样做了,我的提交从所有日志中消失了。我只能在git reflow看到它
猜你喜欢
  • 2020-10-08
  • 2021-05-31
  • 2018-12-19
  • 1970-01-01
  • 2010-12-19
  • 2012-03-02
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多