首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
V2EX  ›  git

一个很神奇的事故,空白 commit,却回滚了前几个 commit 的代码。

  •  
  •   6yong · 2018-05-10 14:45:42 +08:00 · 1588 次点击
    这是一个创建于 577 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看提交记录,在我 commitB 提交记录之后,同事提交了一个 commitA.

    但是该 commitA 用看不到文件修改记录。(照理来说没有修改文件 无法 commit )。

    checkout commitA 的时候,我提交的 commit 里的代码都回滚了。

    请问什么情况会发生这种现象?
    9 回复  |  直到 2018-05-10 16:18:33 +08:00
        1
    jybox   2018-05-10 15:02:53 +08:00
    > 在我 commitB 提交记录之后,同事提交了一个 commitA

    你要看这个「之后」是时间上的先后还是存在父子关系

    >照理来说没有修改文件 无法 commit

    git commit --allow-empty
        2
    jasonyang9   2018-05-10 15:05:53 +08:00
    可能是假个 Git。

    ```
    git reset --hard commitB
    ```

    然后再试着玩玩 commit
        3
    jasonyang9   2018-05-10 15:14:21 +08:00
    怀疑是 force push,忘记 pull 先
        4
    mcfog   2018-05-10 15:15:56 +08:00
    commitA 是不是一个 merge commit ? 可能是同事 merge 的时候用 GUI 的类似” Resolve Conflict With My Code “的功能,相当于自动删掉你的代码,并且 merge commit 由于有 2 个 parent,可能 GUI 上看不到这样的删除,手动选你的 commit 做比较,或者命令行里和 parent2 比较就能看到删除
        5
    6yong   2018-05-10 15:18:25 +08:00
    是的 同事用 SourceTree,我看到他这条 commit 也是有两 parent。应该就是你说的情况了。
    @mcfog
        6
    mcfog   2018-05-10 15:25:07 +08:00
    @6yong 如果是多人用同一条分支开发,建议团队统一用 fetch&rebase,命令行的话`git pull --rebase`,SourceTree 在 pull 的时候勾选 rebase instead of merge,乌龟直接就叫 fetch&rebase

    这样冲突合并以后由于提交的不是 merge commit,还是普通的 commit,比较容易发现这种问题,另外大大减少 commit 的数量和 git log 的复杂程度
        7
    6yong   2018-05-10 15:29:09 +08:00
        8
    6yong   2018-05-10 15:29:35 +08:00
    感谢楼上各位建议
        9
    luoer   2018-05-10 16:18:33 +08:00
    我觉得 commitA 的 parent 是 commitB 导致的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4343 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 03:31 · PVG 11:31 · LAX 19:31 · JFK 22:31
    ♥ Do have faith in what you're doing.