【问题标题】:How can a revert commit also be a merge commit?恢复提交如何也可以是合并提交?
【发布时间】:2015-08-29 10:29:44
【问题描述】:

最近在工作中,我们在使用 git(和私有 github 存储库)进行版本控制的项目中丢失了一些代码。

我使用git bisect 找到了罪魁祸首提交,我真的很惊讶地发现它看起来像是一个还原提交,但也有两个父级像合并提交:

commit b5f97311eea2905baf8a96fddec22321d952f05c
Merge: 8cc7371 131d463
Author: Bob <bob@othercompany.com>
Date:   Fri May 22 19:42:25 2015 +0200

    Revert "ISB-CPW-3627 - Mise en place du calage des filtres DS1/DS2/DS3/DS4"

    This reverts commit 8cc7371e7133b68db95ac8e9aeb730d7889a1166.

此问题已通过从祖先提交创建新分支并在该新分支之上应用一些补丁来解决。

所以我不需要帮助来解决这个问题,我只是想了解恢复提交如何也可能是合并提交,发生了什么,以及如何重现这种奇怪的行为。

我试图像这样复制它:

  • 8cc7371 创建一个新分支
  • git 还原8cc7371

它按预期创建了一个具有单亲 (8cc7371) 的还原提交。

罪魁祸首提交作者使用 Atlassian SourceTree 而不是本机命令行界面,因此我也尝试使用 SourceTree 中的还原功能并得到与上述相同的结果(单亲)。

b5f9731 上运行一些git 命令后,我注意到git diffgit show 没有报告相同的文件集:

$ git diff b5f9731..8cc7371 --name-only
=> 2 files :
   application/sites/frontend/views/scripts/Layout/Foobar/PointsDeVente/index.tpl
   public/media/design/frontend/css/main-dev.css
$ git show --oneline --name-only  b5f9731
=> 1 file :
   public/media/design/frontend/css/main-dev.css

SourceTreeGithub 显示 2 个文件。

您可以在此处找到图表的外观:graph.html,并在此处找到一些 git 命令结果:misc.html

谁能解释b5f9731 发生了什么?

【问题讨论】:

  • 我会将这篇文章添加到收藏夹,并将其用作 Git 相关问题的自定义 How-To-Ask 参考。
  • 调查进展如何?
  • 今天我玩了 SourceTree 的交互式 rebase 功能,但无法重现该问题。我想这个问题与git rebasegit pull --rebase 有关,但我放弃了。我没有足够的信息,3 周前发生这种情况时,我要求提交作者将他的 reflog 发送给我以进行进一步调查,但他无法这样做。他在另一家公司工作(他们在前端工作,而我的公司在服务器端工作),沟通很困难。谜团依然存在:s

标签: git github git-merge atlassian-sourcetree git-revert


【解决方案1】:

我想到了什么:

git revert ...
# new commit abcdef
git merge ...
# new commit fedcba
git rebase -i HEAD~2

pick abcdef - the original revert commit
squash fedcba - the merge commit

消息来自abcdef

这一切都会产生新的b5f9731。它有两个来自合并提交的父级和来自恢复提交的消息。

【讨论】:

  • 谢谢,这是个好主意。我期待比交互式 rebase 更简单的东西(因为提交作者是初学者),但实际上,SourceTree 处理了这个功能。
  • @Vince GUI 的好处是它们允许通过单击按钮进行大规模破坏(通常是无意的)。
【解决方案2】:

从本地分支恢复提交的步骤如下:-

1) 在 git bash 上执行“git log -1”命令 2)从上面的命令中获取“提交的 GUID” 3)在git bash上执行“Git reset --hard commited GUID”命令

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 2012-10-26
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2011-05-04
    • 2018-07-01
    相关资源
    最近更新 更多