不合并,而不是将A合并到B我在GIT LAB中将B合并为A

时间:2017-07-07 18:25:07

标签: git branch gitlab git-merge

我没有将B(分支)合并到A(特征),而是在GIT LAB中将A(特征)合并到B(分支)。 这是我所做的图形表示。 我有这个如下。有了这个,"Branch A2"合并到"feature B2",这不是我想要的。 问题:现在如果我继续开发,那么必须继续开展的分支是"feature B2"而不是"Branch A2"

Branch          A ----A1------ A2 <-- last commit
                 \              \  (merge into feature)
Branch(feature)   B -- -B1- - -- B2 <-- feature now contains Branch "A2" edits.

这就是我想要的。要将"feature B2"合并到"Branch A2";这样,当我继续开发时,它将位于"Branch A2"而不是"feature B2"

Branch(feature) B ----B1------ B2 <-- last feature commit
                 \              \  (merge into Branch)
Branch            A -- -A1- - -- A2 <-- Branch now contains "B2" feature edits.

解决此问题的最简洁方法是什么,以便我可以获得方案2并继续处理"A2"分支机构而不是"B2"功能分支? 从功能的角度来看,无论是合并A2-> B2还是B2-> A2,都可以实现相同的目标 我想到的一种方法是,我可以重命名Merged分支并将其命名为Branch A2

3 个答案:

答案 0 :(得分:1)

假设您的更改未被推送到上游,我认为

git checkout feature
git reset B1 --hard
git checkout branch
git merge feature

应该这样做,其中B1是合并前的提交。

  

我想到的一种方法是,我可以重命名Merged分支并将其命名为Branch A2

当你完成&#34;完成&#34;无论如何,有功能,甚至可能是你的情况下更清洁的解决方案。

git branch -d branch branch-tmp # Delete branch
git branch -m feature branch # Rename feature into branch

答案 1 :(得分:0)

您应该能够在分支中合并之前恢复提交(请参阅How to revert Git repository to a previous commit?),然后以正确的方向重做合并。

答案 2 :(得分:0)

只是为了其他人可能会受到这个问题的影响,这是我的高谈阔论。注意:所有操作都是在** Local Repo中完成的,尽管您可以在remote Repo中的** Git Lab中执行此操作。合并完成后,如原始主题中的图1所示:

  1. 从合并的分支创建一个新分支但是将其命名为分支A或您最初打算使用的任何名称。 git branch <branch name e.g Branch A>
  2. 结帐分支git checkout <branch name eg Branch A>。现在,您的新签出分支和分支B基本上是相同的,因为自上次合并分支以来没有代码更改。
  3. 删除合并来自本地和远程的分支。 git push origin --delete <your remote branch name e.g feature A>并使用git branch -d <your local branch name e.g feature A>
  4. 进行跟进
  5. git branch --list然后git branch -a将其推送到远程仓库之前,请确认这是否是您想要的。 即使您删除了这些分支,也不用担心历史记录,因为下次推送提交时会显示代码合并,而您最近的分支Branch A将在合并时将所有更改都包含在内科。它的工作方式几乎就像C语言中的指针一样。变量名称已消失,但由于您将指针复制到另一个名称,因此更改的地址仍然完好无损。