git:解决合并冲突而不执行合并

Tim*_*imo 10 git

我只是想知道,如果有任何办法,解决两个git分支的合并提交,而不实际合并它们.

假设,我有一个分支"featureMy"; 我的同事创建了另一个分支"featureHis".两个分支都在"master"分支上创建.

然后我的同事为他的分支"featureHis"创建了一个合并请求.当我然后将"featureMy"的合并请求创建为master时,我想确保在"featureHis"合并之后它不会与master发生冲突.

通常,我之前会将"featureHis"合并到"featureMy"中.但是,这并不令人满意,因为我有一个额外的合并提交作为"噪音",我的合并请求将包含来自"featureHis"的更改.

有没有办法,这样我就可以解决合并冲突,而无需创建合并提交?

亲切的问候

ama*_*ert 9

如果您的合并冲突可以通过完全使用文件的一个版本来解决,那么这里有一个解决方案。

假设您想合并到一个名为 的分支,并且和qa中存在冲突 。包含您想要使用的更高版本,而不是分支中的版本。composer.jsoncomposer.lockqa

git checkout origin/qa -- composer.json composer.lock
git commit -m "fixed merge conflicts without merging"
Run Code Online (Sandbox Code Playgroud)


Tim*_*sen 7

避免合并提交的一种标准方法是使用rebase代替合并.请考虑以下情形:

master:     A
featureMy:  A -- B
featureHis: A -- C
Run Code Online (Sandbox Code Playgroud)

假设只存在这两个分支master,那么你们中的一个将master首先合并.让我们说是你的同事首先到达那里.然后图表看起来像这样:

master:     A -- C
featureMy:  A -- B
featureHis: A -- C
Run Code Online (Sandbox Code Playgroud)

你同事的提交现在在master分支机构.现在,如果您使用基于合并的工作流,您将首先合并master到您的分支,然后将您的分支合并回master.这将导致:

master:     A -- C -- E
featureMy:  A -- B -- D
featureHis: A -- C
Run Code Online (Sandbox Code Playgroud)

现在无论您的分行,并master分公司有丑陋的合并在他们提交.但是,如果您已经重新启动了分支机构master,那么您将被置于:

master:     A -- C
featureMy:  A -- C -- B'    (B' indicates that this a new commit, not B)
featureHis: A -- C
Run Code Online (Sandbox Code Playgroud)

现在你的分公司featureMy实际上是提前了的master分支.您可以直接在最上面推送您的提交master,没有冲突.这导致以下图表:

master:     A -- C -- B'
featureMy:  A -- C -- B'
featureHis: A -- C
Run Code Online (Sandbox Code Playgroud)

请注意,任何地方都没有合并提交.事实上,你的featureMy分支和master具有相同的线性历史.

万岁git rebase.

  • 不幸的是,这种情况很少发生在现实生活中。大多数时候 `featureHis` 和 `featureMy` 都是远程分支,因此 re-base 将是灾难性的并且不起作用。 (2认同)