如何让另一个git分支到当前分支?

时间:2016-03-30 18:59:31

标签: git merge branch sourcetree

由于隐私原因,我已经修改了下面的图片,但基本上我有两个分支,我试图在同一个提交。带有标记4.3.1.11的提交与具有标记4.3.1.13的提交不同。我尝试将4.3.1.11合并到4.3.1.13但没有任何改变。

我只是想在同一次提交中获得两个分支。

我该怎么做我知道有类似的问题已被提出,但我没有看到像我这样的情况已被回答。

enter image description here

3 个答案:

答案 0 :(得分:0)

您只需要合并您2个分支的更改。

# Checkout the branch you want to merge the code into
git checkout branchA

# now merge the code form the other branch into this branch:
git merge branchB

现在,branchB也将包含分支A的所有代码。

答案 1 :(得分:0)

要将分支的指针移动到其他提交,只需使用:

git branch -f <branch name> <commit number>

来自:Git: move branch pointer to different commit without checkout

答案 2 :(得分:0)

可能与Merge和Commit这两个术语混淆。在git中,提交只是一个增量,在上下文中的两个更改之间。合并是一种符号提交,它代表一个实体,它结合了两个父母的分支。

这与SVN这样的修订系统有所不同,其中合并实际上是一种东西。在git中,将它视为一种策略更安全。

因此,如果你在回购A和另一个B点有一个点,它们将通过某种路径相互连接(除非它们位于2个独立的孤立分支上)。在告诉git创建一个点C,它可以被认为是分支A或B的扩展,但它是A到B或B到A的符号合并,git将考虑沿路径的所有差异,返回获得A和B的父母,直到找到共享父母。

因此,如果O-A和O-B创建O-A-C(其中C是您的合并)的路径,则将B-O-A视为路径。

这令人困惑,因为你可能会认为O-B是你想要合并的,并且忘记了O-A。但这是合乎逻辑的。

在您的示例中,如果4.3.1.11是A,origin / develop是B且4.3.1.13是G,您可以看到您的分支树只是A-B-C-D-E-F-G。所以从A到G,你只需沿树前进(你可以快进)。

换句话说,G已经包含了A,它只是已经应用了增量B-G,所以显然策略的净效果是git来说'无所事事'。

在您的示例中,4.3.1.11和4.3.1.13是标记,因此根据定义不应移动。正如您在答案中所评论的那样,您可以使用git branch -f将分支指针移动到新提交,但这不是合并。您还可以使用git revert删除提交(要求git创建反向提交,并将其添加到链中)