代码之家  ›  专栏  ›  技术社区  ›  thomasb DaveRead

Git合并和冲突解决使以前的提交消失

  •  2
  • thomasb DaveRead  · 技术社区  · 6 年前

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

    Andy提交并推送文件中的更改 build.ps1 .
    Bob提交其他文件,并提取。

    鲍勃有些矛盾。Git告诉他 有变化,我觉得奇怪,因为只有安迪改变了,但好吧,为什么不呢。
    Bob修复了冲突,然后知道他没有更改此文件,在合并提交之前取消暂存它。他不该那么做,但我想知道接下来会发生什么。

    问题是这样做会将文件恢复到以前的状态,并且明显地删除了文件的提交。

    a213826 是鲍勃试图合并的承诺; b2067fa 安迪的承诺消失了 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
    

    ,我们可以看到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
    

    ,我们可以看到,在合并中,Bob解决了一些冲突,但是 构建.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
    

    然而,乌龟Git讲述了一个完全不同的故事,并展示了 构建.ps1

    git merge

    git log ,的 提交不再出现:

    > 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
    ....
    

    所以,我的问题是:

    • 是什么使提交从文件的“简单日志”中消失,而不在“跟踪日志”中?

    请帮我弄明白这一切!

    1 回复  |  直到 6 年前
        1
  •  2
  •   Matthieu Brucher    6 年前

    在合并过程中,鲍勃从安迪身上解开了分歧构建.ps1是吗?

    所以,如果你看一下主分支,来自Bob,那么Andy的commit没有任何变化。如果你必须从安迪的角度来看,你会看到安迪添加和鲍勃删除的变化。

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