手动合并 git pull 请求

kil*_*out 3 git merge github

我对手动合并拉取请求的正确方法感到困惑,并理解为什么对此有不同的建议。

假设最简单的情况:一个master(长期存在的)分支和一个feature具有多个提交的单个分支,针对这些提交发出了拉取请求,但显示与主分支的合并冲突。

GitHub 说要做:

git fetch origin
git checkout -b feature origin/feature
git merge master
Run Code Online (Sandbox Code Playgroud)

进而

git checkout master
git merge --no-ff feature
git push origin master
Run Code Online (Sandbox Code Playgroud)
  1. 为什么我们先并入masterfeature然后又相反?此 SO表明顺序并不重要,但此 SO表明存在与父级相关的问题。

  2. 此 SO讨论了手动合并拉取请求,但表示您只需将主分支合并功能分支中即可。这与 GitHub 所说的一致吗?

JB *_*zet 5

对于你的第2点,它并没有说将故事合并到master中,因为这不是OP想要做的。

关于你的问题。假设我们有这个:

               master
 *---*----*----*
      \        
       ---*----*
               feature
Run Code Online (Sandbox Code Playgroud)

如果您将master合并到feature中,那么会将 master 中所做的所有更改都带到您的功能分支中。功能分支将包含 master 的最新更改以及功能中的更改:

               master
 *---*----*----*
      \         \
       ---*----*--*
                  feature
Run Code Online (Sandbox Code Playgroud)

因此, master仍将指向与以前相同的提交,但feature将指向一个新的提交,其中包含两个分支的所有更改。

因此,您仍然需要将功能中的更改合并回主版本。现在这是一个非常简单的操作,因为 master 是功能的祖先。所以合并是一个简单的快进

 *---*----*----*
      \         \
       ---*----*--*
                  feature
                  master
Run Code Online (Sandbox Code Playgroud)

我更喜欢保留线性历史,从而在将功能分支合并到 master 之前重新调整 master 上的功能分支。但您的里程可能会有所不同。