我只是想知道,如果有任何办法,解决两个git分支的合并提交,而不实际合并它们.
假设,我有一个分支"featureMy"; 我的同事创建了另一个分支"featureHis".两个分支都在"master"分支上创建.
然后我的同事为他的分支"featureHis"创建了一个合并请求.当我然后将"featureMy"的合并请求创建为master时,我想确保在"featureHis"合并之后它不会与master发生冲突.
通常,我之前会将"featureHis"合并到"featureMy"中.但是,这并不令人满意,因为我有一个额外的合并提交作为"噪音",我的合并请求将包含来自"featureHis"的更改.
有没有办法,这样我就可以解决合并冲突,而无需创建合并提交?
亲切的问候
如果您的合并冲突可以通过完全使用文件的一个版本来解决,那么这里有一个解决方案。
假设您想合并到一个名为 的分支,并且和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)
避免合并提交的一种标准方法是使用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.