【发布时间】:2017-07-24 17:44:27
【问题描述】:
我知道如果您修改文件中的相同行并尝试合并分支,您会遇到合并冲突,因为它不知道要保留哪个版本。
那么,这是否意味着如果您修改文件中的不同行,git 就可以合并它们?这是否也仅适用于添加新行或删除?如果在一个分支中,文件未修改/未触及,而在另一个分支中,有人删除了该文件中的几行,该怎么办。如果我们合并分支,git会保留删除吗?
谢谢!
【问题讨论】:
我知道如果您修改文件中的相同行并尝试合并分支,您会遇到合并冲突,因为它不知道要保留哪个版本。
那么,这是否意味着如果您修改文件中的不同行,git 就可以合并它们?这是否也仅适用于添加新行或删除?如果在一个分支中,文件未修改/未触及,而在另一个分支中,有人删除了该文件中的几行,该怎么办。如果我们合并分支,git会保留删除吗?
谢谢!
【问题讨论】:
Git 不合并文件。它合并更改。
嗯,从技术上讲,它合并了分支,但如果我们考虑单个文件,它会合并这些分支上引入的更改。
因此,如您所说,如果在一个分支中我们没有修改文件,而在另一个分支中我们删除了文件的某些行,那么如果您合并,那么是的,删除的内容将被保留并合并。也就是说,最终合并的文件也会删除这些行。
确切的算法相当复杂,至少比“不一样的行”更复杂。
例如,合并算法需要识别变化的上下文,为了做到这一点,它需要周围没有变化的线条。
因此,如果在一个分支中修改了一行,而在另一个分支中修改了上一行或下一行,则尝试合并可能会导致合并冲突。
【讨论】:
git checkout hash1; git merge hash2 对另一个特定提交的合并进行分离的 HEAD 提交。有人可能会争辩说,这是两个匿名的分支,所以这并不是很明确的一种或另一种方式,无论如何这只是很好的区别,你的回答是正确的。 :-)
当两个用户处理同一个文件时,通常不会出现任何合并冲突,除非他们修改了文件中的相同行。
这意味着如果一行在一个分支中被删除而在另一个分支中保持不变,当两个分支合并时,删除将被保留。
【讨论】: