完成合并/复制/推送分支

时间:2014-04-21 13:06:07

标签: git

作为构建过程的一部分,我需要基本上使一个分支看起来与另一个分支完全相同。它需要是一个实际的分支(标记不是一个选项)。

两个分支都已存在。除此过程外,其他任何内容都不会触及Destination分支。

这就是我所拥有的:

git checkout Destination
git merge Source
git push

这看起来像是一种好方法吗?有更简单的方法吗?

修改

为了澄清,最终目标是获取Source的快照并将其作为Destination推送到远程。我们会在每次运行特定构建时执行此操作。

3 个答案:

答案 0 :(得分:1)

  

我需要基本上让一个分支看起来像另一个分支。

git branch -f one_branch another

现在one_branch看起来与another完全相同。如果您想在本地签出one_branch,请将branch -f替换为checkout -B

答案 1 :(得分:0)

因此,如果您需要准确的状态,为什么不在目标系统上使用Source分支?

我们使用分支进行生产,并使用 dev 分支进行测试。在日常工作中,我们使用功能分支。因此,您可以从 master 分支处创建一个新分支,并在 maste dev 分支中合并功能分支。

在这种情况下,您不应该在分支中合并 dev 。有了这个szenatio,您就可以将您的功能分支放在开发人员的第一位并测试该功能。之后,您将合并中的功能分支并将其置于实时。

这是一个包含合并策略的好教程。

https://www.atlassian.com/git/tutorial/git-branches#!merge

如果你真的需要确切的状态,那么如果你对分支进行硬重置,效果会更好。那么你可以肯定它真的一样。

答案 2 :(得分:0)

如果您想在my_branch的提示上创建一个与other_branch提示内容完全相同的新提交,那么这是一种方法:

$ git checkout my_branch                        # make sure we are on the branch we want to add to
$ git rm -rf .                                  # remove everything belonging to current tip
$ git archive other_branch | tar xf -           # replace with the contents of other_branch tip
$ git add -A .                                  # stage all the modifications
$ git commit -m "updated to other_branch"       # commit the changes

如果您使用的是Windows并且没有tar可用,那么git archive步骤可能需要更像git archive --format=zip other_branch | unzip ... - 我不会使用Windows' unzip经常足以记住适当的选项,并且您可能有一个不同的解压缩器,如winzip或其他东西,因此确切的命令可能需要一些调整。但基本过程应该保持不变......

您使用git merge的方法是有效的,但可能无法生成您想要的结果,因为它会创建一个新的提交,其中包含在两个分支上合并的更改(因此名称...),以及所以它不是真正的快照。以上是other_branch当前提示的快照,并将其添加为my_branch顶部的新提交,并且适用于例如构建仅包含发布快照的侧分支的情况,或没有所有中间提交的其他特定里程碑类型提交。

您也可以使用git merge -s ours --squash或其他东西实现此目的,然后移动分支指针,但我倾向于认为上述内容至少在概念上更容易理解。