【问题标题】:Git does not raise merge conflict when a branch with a changed file is merged in the master branch当具有更改文件的分支合并到主分支中时,Git 不会引发合并冲突
【发布时间】:2021-05-19 13:26:12
【问题描述】:

当我试图将一个分支合并到 master 时,我预计会发生合并冲突。这两个分支都有一个文本文件,其中包含不同的文本。

# make project directory
mkdir projA
cd projA

# initialize git repo
git init

# make commit in master branch
echo "text 1" > fileA.txt
git add .
git commit -m "commit A"

# make commit in a new branch
git checkout -b branch1
echo "text 2" > fileA.txt
git add .
git commit -m "commit B"

# merge branch into master
git checkout master
git merge branch1

但合并命令只是进行快进合并,并保留 brach1 的 txt 文件中存在的文本,而不是 master 分支。

有人能解释一下为什么 git 没有引发合并冲突吗?

【问题讨论】:

    标签: git github git-merge merge-conflict-resolution


    【解决方案1】:

    当您正在合并的分支的提交历史无法自动协调(通过快进或合并提交)时,就会发生合并冲突。

    您对 master 的提交历史是:A
    您对 branch1 的提交历史记录是:A - B
    因此,将 branch1 合并到 master 不会导致冲突,因为它所需要做的就是在 A 之上应用 B

    假设你有另一个提交 C 这样:
    您对 master 的提交历史是:A - C
    您对 branch1 的提交历史记录是:A - B
    然后您可能会遇到合并冲突,因为您的分支说将C 应用于A,而另一个分支说将B 应用于A。但是,如果 BC 没有更改相同的文件,您仍然不会遇到合并冲突,因为 git 可以计算出如何自动合并它们。

    【讨论】:

    • 我完全无法理解。提交历史是什么意思?
    • 提交历史是应用到分支的提交的有序列表——这是你在运行git log时看到的。当 git 无法自动解决您尝试合并的分支的提交历史记录中的差异时,就会发生合并冲突。
    • @n0obcoder:当您在存储库中运行 git log --all --decorate --oneline --graph 并在多个分支中进行开发时,这往往会变得更加清晰。另请参阅Pretty Git branch graphs
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 2020-04-18
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多