假设我有一个名为
feature-branch
的分支,它落后于 main
几次提交。当我尝试使用以下方法将 main
合并到本地的 feature-branch
时:
git merge origin/main
Git 提取来自
main
的所有更改,包括冲突文件和非冲突文件。这会导致我的分支中发生大量文件更改,即使我只关心解决冲突。
例如,如果
main
在 100
文件中有更改,但我只在其中 5
中存在冲突,则正常的 git merge origin/main
将显示我的分支中更改的所有 100
文件。这使得我的拉取请求 (PR) 看起来像是我更改了 100
文件(即使我没有),这使得审查变得更加困难。
本例中发生的情况如下:
我跑步
git merge origin/main
。
Git 尝试将 main
中的所有文件合并到 my feature-branch
中,我在暂存区域中看到很多更改(冲突文件和非冲突文件)。
结果,我的 PR 显示了大量文件更改,甚至是我没有触及的文件更改。
我想做的只是解决冲突的文件,而不从
main
中提取所有非冲突的更改。这类似于 GitHub 冲突解决的工作原理 — GitHub 只向我显示冲突文件并允许我解决这些文件。非冲突文件不包含在 PR 中。
我想要的示例: 想象一下
main
这些文件发生了变化:
file1.js (no conflict)
file2.js (no conflict)
file3.js (conflict)
file4.js (conflict)
在 GitHub 的冲突解决界面中:
file3.js
和 file4.js
(冲突文件)。file1.js
和 file2.js
中的更改。file3.js
和 file4.js
)。file1.js
、file2.js
、file3.js
和 file4.js
)中获取更改,并且我的 PR 最终会进行大量不必要的文件更改。 我想知道的是: 我问是否有一种方法可以只在本地解决冲突——就像 GitHub 所做的那样——而不从
main
拉取所有非冲突的更改。我希望我的 PR 仅显示对有冲突的文件的更改,而不是在 main
中更新的所有文件。
避免拉取请求显示除您自己之外的更改的一种方法是将目标分支(在本例中为“主”)中的最新内容本地合并到您的功能分支中。假设您当前位于功能分支上,您可以使用以下策略:
git commit
(如果您的分支机构有任何未完成的更改)git checkout main
git pull
git checkout [your-feature-branch-name]
(输入实际分支名称时省略方括号)git merge main
git mergetool
(或者您最喜欢的解决合并冲突的其他方法,假设这一步有一些)git merge --continue
git push
(如有必要,请附加原点/[您的功能分支名称])此时,如果您创建了拉取请求(PR),GitHub 将仅显示您的功能分支更改,没有合并冲突。最好与任何团队成员核实,看看是否有人同时合并到“主”,这样您就不必快速连续地对同一分支多次执行此过程。