Git与冲突解决方案合并使先前的提交消失了

时间:2018-10-17 12:07:55

标签: git git-merge

我们遇到了一个非常奇怪的问题,很难解释,我会尽力说明。

Andy提交并推送文件build.ps1中的更改。
鲍勃提交其他文件,然后拉。

鲍勃有一些冲突。 Git告诉他build.ps1文件有更改,我觉得很奇怪,因为只有Andy更改了,但是好吧,为什么不呢?
Bob修复了冲突,然后知道自己尚未更改此文件,因此在合并提交之前取消暂存该文件。他不应该那样做,但是我想了解接下来会发生什么。

问题在于这样做已将文件还原到以前的状态,并且显然删除了文件的提交。

在日志中:a213826是Bob试图合并的提交; b2067fa是消失的Andy提交,而81bcc94是合并提交。

> git log --pretty=format:'%h - %d %s (%cd) <%an>' --abbrev-commit
* 753c504 - (HEAD) ... (10/17/18 10:19:52) <Clark>
... other commits
* 81bcc94 - Merge (10/16/18 18:53:09) <Bob>
* b2067fa - build file (10/16/18 17:19:32) <Andy>
... other commits
* a213826 - members selection (10/16/18 17:35:46) <Bob>
... other commits

a213826中,我们可以看到Bob更改了一些文件:

> git show --name-status a213826
commit a2138265ba464afed6955f7a2976b9d868c6449e
Author: Bob
Date:   Tue Oct 16 17:35:46 2018 +0200
    members selection
M       Viewer3D.DataAccess/DataAccess.cs
M       Viewer3D.DataAccess/IDataAccess.cs
M       Viewer3D/Content/view-panel.css
M       Viewer3D/Controllers/DirectoryController.cs
M       Viewer3D/Controllers/NotesController.cs
M       Viewer3D/Scripts/class-panel.js
M       Viewer3D/Scripts/view-panel-note-form.js
M       Viewer3D/Views/Home/_PanelNotes.cshtml

81bcc94中,我们可以看到Bob在合并中解决了一些冲突,但是build.ps1文件没有被修改:

> git show --name-status 81bcc94
commit 81bcc94cbe26859ca6b02d2908f6afc64aec1701
Merge: a213826 b2067fa
Author: Bob
Date:   Tue Oct 16 18:53:09 2018 +0200
    Merge
MM      Viewer3D.DataAccess/DataAccess.cs
MM      Viewer3D.DataAccess/IDataAccess.cs
MM      Viewer3D/Content/view-panel.css
MM      Viewer3D/Controllers/NotesController.cs
MM      Viewer3D/Scripts/view-panel-note-form.js

但是,Tortoise Git讲述了一个非常不同的故事,并显示了build.ps1文件的修改内容!

git merge

在文件的git log中,不再出现b2067fa提交:

> git log -p -- .\build_psake.ps1
commit 2d5eef1d1a13508621afe99bad8a2af05f3cc298
Author: Andy
Date:   Tue Sep 4 15:25:12 2018 +0200
    changes build path
(some diff)

commit 23dd900f71e88053b333b886491a2b5a9b971291
Author: Clark
Date:   Mon Jun 18 09:19:34 2018 +0000
...

但是,如果我们log --follow,则提交再次出现:

> git log --follow -p -- .\build_psake.ps1
commit b2067fac01e9b8d8ee4d6a88a91f4fd994efdf9e
Author: Andy
Date:   Tue Oct 16 17:19:32 2018 +0200
    build file
(some diff)

commit 2d5eef1d1a13508621afe99bad8a2af05f3cc298
Author: Andy
Date:   Tue Sep 4 15:25:12 2018 +0200
    changes build path
....

所以,我的问题:

  • 为什么Git告诉Bob文件A已更改?不应该将相应的提交默默地合并吗?
  • 是什么使提交从文件的“简单日志”中消失,但在“跟随日志”中却没有消失?
  • 为什么git告诉我日志中的文件没有更改,但是Tortoise Git告诉我相反的内容?

请帮助我理解一切!

1 个答案:

答案 0 :(得分:2)

在合并过程中,Bob取消了Andy在build.ps1上的差异,不是吗?

因此,如果您查看来自Bob的主分支,则Andy的提交没有更多变化。如果必须从Andy的角度来看,您会看到Andy添加而Bob删除了更改。

鲍勃的盒子上可能有一些局部变化,也许行尾吗?