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

2018-05-10 14:45:42 +08:00
 6yong
看提交记录,在我 commitB 提交记录之后,同事提交了一个 commitA.

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

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

请问什么情况会发生这种现象?
2415 次点击
所在节点    git
9 条回复
jybox
2018-05-10 15:02:53 +08:00
> 在我 commitB 提交记录之后,同事提交了一个 commitA

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

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

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

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

然后再试着玩玩 commit
jasonyang9
2018-05-10 15:14:21 +08:00
怀疑是 force push,忘记 pull 先
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 比较就能看到删除
6yong
2018-05-10 15:18:25 +08:00
是的 同事用 SourceTree,我看到他这条 commit 也是有两 parent。应该就是你说的情况了。
@mcfog
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 的复杂程度
6yong
2018-05-10 15:29:09 +08:00
6yong
2018-05-10 15:29:35 +08:00
感谢楼上各位建议
luoer
2018-05-10 16:18:33 +08:00
我觉得 commitA 的 parent 是 commitB 导致的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/453767

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX