合并不正确,我没有将 A 合并到 B,而是在 GIT LAB 中将 B 合并到 A

Incorrrect Merge, Instead of merging A to B I merged B to A in GIT LAB

我在 GIT LAB 中将 A(功能)合并到 B(分支),而不是将 B(分支)合并到 A(功能)。 这是我所做的图形表示。 我有这个如下。有了这个 "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

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

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

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

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

One way comes to mind is that I can rename the Merged branch and call it Branch A2

无论如何,当您 "done" 拥有功能时,这甚至可能是您的情况下更干净的解决方案。

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

只是为了其他可能踩到这个线程的人的利益,这是我的演讲。注意:所有操作都是在 ** Local Repo 中完成的,尽管您可以在 ** remote RepoGit 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. 在通过 git branch --listgit branch -a 将其推送到远程仓库之前确认这是否是您想要的。 即使你删除了这些分支也不用担心历史,因为当你下次推送你的提交时它会显示有代码合并并且你最近的分支 Branch A 将包含你合并时的所有更改分支。它的工作方式几乎类似于 C 语言中的指针。变量名不见了,但由于您将指针复制到另一个名称,您更改的地址仍然完好无损。