作为构建过程的一部分,我需要基本上使一个分支看起来与另一个分支完全相同。它需要是一个实际的分支(标记不是一个选项)。
两个分支都已存在。除此过程外,其他任何内容都不会触及Destination分支。
这就是我所拥有的:
git checkout Destination
git merge Source
git push
这看起来像是一种好方法吗?有更简单的方法吗?
修改
为了澄清,最终目标是获取Source的快照并将其作为Destination推送到远程。我们会在每次运行特定构建时执行此操作。
答案 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
或其他东西实现此目的,然后移动分支指针,但我倾向于认为上述内容至少在概念上更容易理解。