繁体   English   中英

git:在不执行合并的情况下解决合并冲突

[英]git: Solve merge conflicts without performing a merge

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

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

然后,我的同事创建了一个将他的分支“featureHis”合并到 master 的合并请求。 然后,当我将“featureMy”的合并请求创建到 master 时,我想确保它在“featureHis”合并后不会与 master 冲突。

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

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

亲切的问候

避免合并提交的一种标准方法是使用变基代替合并。 考虑以下场景:

master:     A
featureMy:  A -- B
featureHis: A -- C

假设只有这两个分支存在于master ,那么你们中的一个将首先与master合并。 假设是您的同事第一个到达那里。 那么图表将如下所示:

master:     A -- C
featureMy:  A -- B
featureHis: A -- C

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

master:     A -- C -- E
featureMy:  A -- B -- D
featureHis: A -- C

现在你的分支master分支都有丑陋的合并提交。 但是,如果您在master重新建立了分支,则会留下:

master:     A -- C
featureMy:  A -- C -- B'    (B' indicates that this a new commit, not B)
featureHis: A -- C

现在你的分支featureMy实际上领先master分支。 你可以简单地将你的提交直接推送到master之上,没有冲突。 结果如下图所示:

master:     A -- C -- B'
featureMy:  A -- C -- B'
featureHis: A -- C

请注意,任何地方都没有合并提交。 实际上,您的featureMy分支和master都具有相同的线性历史记录。

git rebase万岁。

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

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

git checkout origin/qa -- composer.json composer.lock
git commit -m "fixed merge conflicts without merging"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM