我已经从公司的前一位开发人员那里继承了一个项目。有一个master分支和一个foo分支。 Gitk显示最后一次提交是foo与master的合并,因此它们应该相等。实际上,如果我尝试通过执行以下操作再次合并:
git merge foo
在master分支上,它将说master是“已经更新”。
不过,如果我在它们之间做一个区分,就像:
git diff foo
从大师那里,我在几十个文件中进行了许多更改。而且,实际上,如果我签出一个或另一个分支,它们是不同的。
那么...为什么我有这种看似混乱的情况?我该怎么解决?
非常感谢!
答案 0 :(得分:2)
master
获得了所有foo
的提交,但事实并非如此,因此您可能(并且显然有)不同之处,即master
中的内容不是 在foo
中。
您必须将master
重新合并到foo
中以使其差异无效,尽管很少需要这样做,至少在涉及简单要素分支时,通常在提供服务后就将其删除他们的目的。
答案 1 :(得分:2)
Git分支是指向提交的指针。当您合并两个分支时(实际上,您合并了两个提交),将创建一个新的提交并将当前分支移至新的提交。合并的分支不会更改。
这里是一个例子。
当前分支为A
,还有另一个分支B
与过去的A
不同。
HEAD -> A -> o o <- B
| |
o o
| /
o o
| /
o
|
在git merge B
之后,将创建一个新的提交(由于是合并提交,因此有两个父提交),分支A
移至指向新创建的提交。 B
保持以前的位置。
HEAD -> A -> o
| \
o o <- B
| |
o o
| /
o o
| /
o
|
在git merge B
之后,git diff B
显示分支A
中但分支B
中不存在的更改。它们是在图的左分支上操作的更改,是从B
提交无法到达的提交。
HEAD -> A -> o
| \
/-> o o <- B
in A | | |
but not |-> o o
in B | | /
\-> o o
| /
o
|