Github告诉一个用户存在冲突,而不是另一个用户
我们在Github上有一个存储库。一个用户创建了一个分支,将其签入Github,并创建了一个拉请求。当他登录到Github并查看PR时,底部有一条消息说没有冲突,可以合并此PR。有一个绿色按钮来做这件事 当我登录Github并查看同一个PR时,我看到一条不同的消息:“由于冲突,无法重新设置此分支的基础基础。由于在重新应用来自头分支的单个提交时遇到冲突,无法自动在基础分支上重新设置此分支提交的基础。” 为什么我们看不到同样的东西 我们的登录和一些配置选项有什么不同吗 他在IDE中可能有不同的选项,但这不应该有什么区别。Github上只有一个版本的回购协议。他在Windows上,我在Mac上,但这也没什么区别Github告诉一个用户存在冲突,而不是另一个用户,git,github,Git,Github,我们在Github上有一个存储库。一个用户创建了一个分支,将其签入Github,并创建了一个拉请求。当他登录到Github并查看PR时,底部有一条消息说没有冲突,可以合并此PR。有一个绿色按钮来做这件事 当我登录Github并查看同一个PR时,我看到一条不同的消息:“由于冲突,无法重新设置此分支的基础基础。由于在重新应用来自头分支的单个提交时遇到冲突,无法自动在基础分支上重新设置此分支提交的基础。” 为什么我们看不到同样的东西 我们的登录和一些配置选项有什么不同吗 他在IDE中可能有不同的选项,
在我尝试在本地重新设定基准之前,有没有办法让我知道冲突到底是什么 如果一个版本正在添加作为冲突生成器的代码,而另一个版本又将其收回,则可能会出现重定基础冲突,并且不会出现合并冲突。如果合并,该分支将不会有冲突的代码。。。但是,如果一个版本一个版本地修改(如在重基中),则必须处理两次冲突。如果一个版本添加了冲突生成器代码,然后另一个版本将其收回,则可能会出现重基冲突,而不会出现合并冲突。如果合并,该分支将不会有冲突的代码。。。但是,如果你一次又一次地修改(如在重基中),你将不得不处理两次冲突。正如问题下面的评论所指出的,这是因为GitHub提供给没有问题的人合并提交,但对你来说,GitHub提供给重基提交。有时,合并很容易,而重新调整则不容易 下面是一个提交系列的简单示例,它可以轻松合并,但不能重定基准。首先,让我们绘制提交的实际图表:
...--G--H------L <-- master
\
I--J--K <-- branch
在commitL
中,我们将第2行更改为这是第2行。因此H
-vs-L
更改了文件makeconflict
的第2行(并且不做其他更改)
同时,在commitI
中,我们删除了文件makeconflict
的第2行。在commitJ
中,我们对一些有用的文件进行了有用的更改,而不涉及filemakeconflict
。在commitK
中,我们将文件makeconflict
的第2行放回原处
如果我们尝试将合并提交K
(分支的尖端分支
)到主控
,Git将H
与L
进行比较,并发现makeconflict
第2行已更改。它将H
与K
进行比较:这表示我们必须从H
更改文件makeconflict
的第2行,以保留在master
中所做的更改。然后将H
与K
进行比较,看看我们做了什么。由于我们将第2行放回了K
,Git唯一需要与makeconflict
的更改相结合的更改就是对重要文件的更改。因此,合并进展顺利,更改了重要文件,我们得到:
...--G--H------L--M <-- master (HEAD)
\ /
I--J--K <-- branch
试图将I
复制到I'
——从H
复制到I
的区别在于我们必须删除文件makeconflict
的第2行,而H
和L
之间的区别在于我们必须更改文件makeconflict
的第2行。这两种不同的变化相互冲突。我们必须选择要进行的更改:将2
替换为2
,还是完全删除该行
如果我们完全删除需要手动干预的行,而GitHub不会通过web UI执行此操作–我们可以继续将J
复制到J'
和K
复制到K'
:
I'-J'-K' <-- branch (HEAD)
/
...--G--H------L <-- master
\
I--J--K [abandoned]
当然,当在I'
处理合并冲突时,我们可以选择放弃I
的更改,保留L
的更改。最后,我们只需完全跳过复制I
。当我们开始复制commitK
来生成K'
时,我们通常会遇到另一个合并冲突,尽管有时候Git会意识到也不需要commitK
。如果我们正确处理冲突,我们也将删除K
:
J' <-- branch (HEAD)
/
...--G--H------L <-- master
\
I--J--K [abandoned]
J'正如问题下面的评论中所指出的,这是因为GitHub为那些认为没有问题的人提供了合并提交的服务,但对你来说,GitHub提供了重新设置提交基础的服务。有时,合并很容易,而重新调整则不容易
下面是一个提交系列的简单示例,它可以轻松合并,但不能重定基准。首先,让我们绘制提交的实际图表:
...--G--H------L <-- master
\
I--J--K <-- branch
在commitL
中,我们将第2行更改为这是第2行。因此H
-vs-L
更改了文件makeconflict
的第2行(并且不做其他更改)
同时,在commitI
中,我们删除了文件makeconflict
的第2行。在commitJ
中,我们对一些有用的文件进行了有用的更改,而不涉及filemakeconflict
。在commitK
中,我们将文件makeconflict
的第2行放回原处
如果我们尝试将合并提交K
(分支的尖端分支
)到主控
,Git将H
与L
进行比较,并发现makeconflict
第2行已更改。它将H
与K
进行比较:这表示我们必须从H
更改文件makeconflict
的第2行,以保留在master
中所做的更改。然后将H
与K进行比较
...--G--H------L--I'-J'-K' <-- branch, master (HEAD)
\
I--J--K [abandoned]
J' <-- branch (HEAD)
/
...--G--H------L <-- master
\
I--J--K [abandoned]