Git:没有分支的项目会有合并冲突吗?

Git:没有分支的项目会有合并冲突吗?,git,Git,这听起来可能是个愚蠢的问题,但我只在master branch工作,我有一个.txt文件,如下所示: abc def 然后我把它改成了 abc ghi 然后我做到了 $ git add . $ git commit -m "trying to cause conflict" $ git push 而且它工作没有任何问题,文件被更改了。我想知道如果项目除了master之外没有分支,git是否关心这种“冲突”情况。获得合并冲突的标准方法是从分支alpha开始,在alpha的基础上创建分支bet

这听起来可能是个愚蠢的问题,但我只在master branch工作,我有一个.txt文件,如下所示:

abc
def
然后我把它改成了

abc
ghi
然后我做到了

$ git add .
$ git commit -m "trying to cause conflict"
$ git push

而且它工作没有任何问题,文件被更改了。我想知道如果项目除了master之外没有分支,git是否关心这种“冲突”情况。

获得合并冲突的标准方法是从分支
alpha
开始,在
alpha
的基础上创建分支
beta
,然后在两个分支上进行不兼容的更改。
在您的示例中,您只需更改文本文件的内容,git将很高兴地跟踪该更改(并将其还原、隐藏、用于樱桃采摘,或者您可能想做的任何事情)

答案取决于您如何定义“分支”

在Git中,单词“branch”可以表示分支名称,如
master
,也可以表示提交图中的分支。(另见)

通常,要在提交图中获得分支,至少需要两个名称。但是,像
master
这样的分支是以文本
refs/heads/
开头的名称的简写:分支
master
实际上是
refs/heads/master
,如果创建名为
a
的分支,则其全名为
refs/heads/a
。您的Git将这些名称存储在自己的名称到散列ID映射的私有表中。此表还具有标记名,如
v2.3
,是
refs/tags/
中名称的缩写,以及Git所称的远程跟踪分支,如
origin/master
,是
refs/remotes/origin/master
的缩写

如果您有一个
原点
,您可能有一个
原点/母版
与您自己的
母版
一起使用。这给了你两个名字。只有一个是分支名称,但这两个名称都可能取决于您定义“分支”的方式—导致分支


除此之外,您还可以使用“分离头”创建匿名分支(如果您首先选择将其称为分支)。然后,您可以根据提交的原始哈希ID命名提交,并通过合并此类提交创建合并冲突。这是一种仅与一个分支名称发生冲突的方法。但是有多个分支吗?同样,这取决于定义“分支”的人。

当您没有任何其他显式分支并且您是唯一的分支时,仍然可能存在冲突

当当前磁头与主磁头分开时,可能会发生这种情况。从技术上讲,当前的头,分离或仍然命名为主,是另一个不同于原始主的分支。有时,当你不能很好地维护本地主服务器时,它就会出现。当您运行“git pull”时,如果当前磁头和远程主机在同一块中有不同的内容,则可能会发生冲突

另一种可能的情况是当您尝试重新应用旧的提交或修补程序时。进行提交A,然后通过git revert A将其还原为提交B。之后,进行新的提交C,该提交C将使用不同的更改接触A的部分或所有相同块。现在,如果你选择一个樱桃,冲突就会发生


发生冲突时,请检查工作流是否合理,然后解决冲突。

发生冲突的原因是提交有两个父级,每个父级都有一个或多个文件的不同版本。在您的示例中,分支只有一行,因此不可能存在冲突。Git完全可以弄清楚如何从第一个版本转换到第二个版本。因此,只有当我提到的.txt文件的情况发生时,才会发生冲突,但是一个版本来自一个分支,而另一个版本来自另一个分支?是的,但即使这样也不能保证会导致冲突。Git可能能够在没有任何冲突的情况下解决更改。或者,可能存在合并冲突。理想情况下,如果您的团队很好地规划其Git工作流,那么在任何日常工作中都应该很少有合并冲突。规划可能很重要-如果两个人在同一个文件上工作,您可能很容易发现自己正在以Git无法检测到的方式进行更改。例如,如果一次提交删除了某个函数f的定义,同时提交添加了对该函数的调用,git将接受这些函数,认为它们是兼容的,但代码当然会失败。这是进行可靠测试并使用它们的众多原因之一。