【问题标题】:Incorrrect Merge, Instead of merging A to B I merged B to A in GIT LAB不正确的合并,而不是将 A 合并到 B 我在 GIT LAB 中将 B 合并到 A
【发布时间】:2017-12-12 03:28:21
【问题描述】:

我没有将 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

【问题讨论】:

    标签: git branch gitlab git-merge


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      无论如何,当您“完成”功能时,这甚至可能是您的情况下更清洁的解决方案。

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

      【讨论】:

      • @SVSchmidt,不幸的是,更改已经推送到 GITLAB。
      • 你推送到哪个远程分支?
      • @SVSchmidt。你的解决方案摇滚!在我的案例中,该解决方案被推送到上游,删除/操作分支是保持我的 git 历史干净的最佳方法。
      【解决方案3】:

      只是为了其他可能涉足此线程的人的利益,这是我的咒语。注意:所有操作都是在 ** Local Repo 中完成的,尽管您可以在 Git Lab 中的 ** remote Repo 中执行此操作。合并完成后,如原始线程中的图 1 所示:

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

      【讨论】:

        猜你喜欢
        • 2020-08-09
        • 2016-11-20
        • 2019-04-16
        • 1970-01-01
        • 2011-08-01
        • 1970-01-01
        • 2016-10-10
        • 2015-02-01
        • 2016-03-07
        相关资源
        最近更新 更多