首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在这种情况下会丢失git提交?

为什么在这种情况下会丢失git提交?
EN

Stack Overflow用户
提问于 2019-04-20 03:43:12
回答 1查看 93关注 0票数 2

我的同事做了一系列粗心的拉/推操作。他最终陷入了一种情况,那就是他在当地的承诺丢失了。

我用git reflog恢复了他的承诺。但我不明白为什么他的行动会导致这种情况。有人能放点灯吗?

请参见下面的git reflog输出和注释:

代码语言:javascript
复制
#######
# reflog is in reverse manner, most recent operation first
# test is like our "develop" branch, MTX-65 is the feature branch
# Both are remote-tracking
#######
39261b7 (HEAD -> MTX-65, origin/feature/MTX-65) HEAD@{0}: checkout: moving from test to MTX-65
7f66c72 (test) HEAD@{1}: checkout: moving from MTX-65 to test
39261b7 (HEAD -> MTX-65, origin/feature/MTX-65) HEAD@{2}: pull: Fast-forward
d51c1be HEAD@{3}: rebase finished: returning to refs/heads/MTX-65
d51c1be HEAD@{4}: rebase: Add Notification
c33d31f HEAD@{5}: pull --tags -r origin feature/MTX-65: checkout c33d31f4d0109396dea6d6bb78f47ba56097e4ac

#######
# This is the key commit that got lost
# It's not in `git log` out any more
#######
a6a7a7e HEAD@{6}: commit (merge): Warning message
3c8113c HEAD@{7}: commit (amend): Add Notification
7f551e4 HEAD@{8}: commit: Add Notification
96bcf99 HEAD@{9}: pull --tags -r origin feature/MTX-65: Fast-forward
b79bee0 HEAD@{10}: commit: personal & institution page
3cfb1aa HEAD@{11}: commit: Institution:
7f66c72 (test) HEAD@{12}: checkout: moving from test to MTX-65
7f66c72 (test) HEAD@{13}: merge MTX-65: Fast-forward
0733fd2 HEAD@{14}: checkout: moving from MTX-65 to test
7f66c72 (test) HEAD@{15}: commit (merge): Merge test
ebfaeea HEAD@{16}: checkout: moving from test to MTX-65
0733fd2 HEAD@{17}: pull: Fast-forward
1043c35 HEAD@{18}: checkout: moving from MTX-65 to test

#######
# This is a commit that still exists after the disaster
#######
ebfaeea HEAD@{19}: commit: institution 认证信息
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-21 03:58:08

让我们来看看a6a7a7e HEAD@{6}: commit (merge): Warning message

commit (merge)表示合并遇到的冲突。解决冲突后,同事将默认提交消息更改为Warning message。默认消息类似于Merge made by the 'recursive' strategy

然后,您的同事运行git pull --tags -r origin feature/MTX-65。在-r中,在完成提取之后将使用git rebase而不是git merge

正如手册所说,

默认情况下,重基将简单地从todo列表中删除合并提交,并将基于重基的提交放到一个线性分支中。

关于哪个更好,git merge还是git rebase,有很多争论。git rebase的优点之一是我们可以使用它以方便的方式创建线性历史。按照设计,合并提交在默认情况下被删除,尽管git rebase提供了-r-p以在某些情况下保留它们。

git rebase期间,冲突将再次发生。理论上,如果您的同事以与以前git merge相同的方式解决这些更改,则不会丢失这些更改。您可以尝试git log --reflog -S <keywords> -p来找出哪些提交更改,包括关键字丢失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55770050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档