如何像解决github上的冲突一样在本地解决冲突?

问题描述 投票:0回答:1

假设我有一个名为

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
    )。
  • 但是当我使用 git merge 在本地执行此操作时,我会从所有文件(
    file1.js
    file2.js
    file3.js
    file4.js
    )中获取更改,并且我的 PR 最终会进行大量不必要的文件更改。

我想知道的是: 我问是否有一种方法可以只在本地解决冲突——就像 GitHub 所做的那样——而不从

main
拉取所有非冲突的更改。我希望我的 PR 仅显示对有冲突的文件的更改,而不是在
main
中更新的所有文件。

git merge-conflict-resolution
1个回答
0
投票

避免拉取请求显示除您自己之外的更改的一种方法是将目标分支(在本例中为“主”)中的最新内容本地合并到您的功能分支中。假设您当前位于功能分支上,您可以使用以下策略:

  1. git commit
    (如果您的分支机构有任何未完成的更改)
  2. git checkout main
  3. git pull
  4. git checkout [your-feature-branch-name]
    (输入实际分支名称时省略方括号)
  5. git merge main
  6. git mergetool
    (或者您最喜欢的解决合并冲突的其他方法,假设这一步有一些)
  7. git merge --continue
  8. git push
    (如有必要,请附加原点/[您的功能分支名称])

此时,如果您创建了拉取请求(PR),GitHub 将仅显示您的功能分支更改,没有合并冲突。最好与任何团队成员核实,看看是否有人同时合并到“主”,这样您就不必快速连续地对同一分支多次执行此过程。

© www.soinside.com 2019 - 2024. All rights reserved.