Py学习  »  Git

git合并的奇怪之处?

Jhon Piper • 5 年前 • 1600 次点击  

我是git的新手,所以这对其他人来说似乎很简单,我只是不理解。

我们有三个分部

  • 我的名字

好吧,那么:

  1. 在创建其他两个分支之前,我直接在master中创建了一个test.txt文件,并将其保留为空。
  2. 我们创建另外两个分支,签出分支,在没有其他行的情况下在第1行写“Test 1”,然后提交并与master合并。
  3. 我的朋友签出他的分支,在第1行写“Test 2”,在第3行写“Hotfix”,然后他提交并与master合并,得到一个合并错误,因为在第1行1被更改为2,并且添加了Hotfix。

与我们正在运行的测试相比,这有点简单,但是git真的不够聪明吗?当我们做了这么简单的更改时,git是否认识到了区别?我可以看到它问 第1行应该有1或2,但为什么它抱怨在新的行上添加了修补程序?

编辑,为了清楚起见,这里是我在终端中所做的一个读数:我解释了我在提交消息中所做的,虽然我不知道如何显示来自bash终端的合并冲突,但这里是它在vscode中打印的冲突的屏幕截图: https://imgur.com/a/Yd6EXx2 .

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56201
 
1600 次点击  
文章 [ 1 ]  |  最新文章 5 年前
torek
Reply   •   1 楼
torek    5 年前

Git认为,如果对同一原始源代码行进行不同的更改,则更改会相互冲突 如果这两个改变“接触”的边缘。后者的原因是Git不知道 秩序 把它们放进去。

也就是说,假设从同一个空的开始 test.txt 你的 变化是:

+Test 1

Test 1 )以及 变化是:

+Test 2
+Hotfix

Git不知道是先把你的行放在他的两行后面,还是先把他的两行放在你的行后面。

你说他做的事改变了“第三行”。没有3号线。也许最初的空文件实际上是 空白的 行吗?那么 你的

-
+Test 1

也就是说, 去除 测试1 . 伊斯

+Test 2

+Hotfix

(也就是说, 保持 改变 改变 添加和/或删除 线条,这是另一个改变的原因,就像这种冲突一样

无论哪种方式,如果您更改了不同的行或没有“接触”彼此,就不会发生合并冲突。也就是说,假设 text.text 文件读取:

This test file
has several
lines in it.

测试1 顶部 . 他做了一个改变 Test 2 Hotfix 在底部。当Git将文件的三行开头的版本与四行开头的版本和五行开头的版本进行比较时,Git发现 你的 更改是在“第0行”(文件顶部)和第1行之间插入,其更改是在“第4行”(文件底部)之前的第3行之后插入。这些变化 不要

Test 1
This test file
has several
lines in it.
Test 2
Hotfix

想想 合并基

另一种说法是:Git没有将其更改添加到 你的版本 他的版本 文件的。Git正在寻找 合并基

记住,每次提交都会存储每个文件的完整快照。如果Git能找到 任何 二者都

合并基础是“最好的”提交,从中开始的是最接近双方最终结果的提交。因为你们都是从 相同的 承诺,你们两个都有 此文件的版本。因此Git可以运行两个 git diff 操作。一个人发现了什么 改变。Git的工作是将这两组更改组合起来,并将这些组合的更改应用到 基础

当这些更改影响不同的行并且不重叠时,Git可以自己组合它们。当它们影响到同一行时,或者执行abut时,Git不能单独组合它们。