如何还原提交也是合并提交?

Vin*_*nce 7 git github git-merge git-revert atlassian-sourcetree

最近在工作中,我们使用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.
Run Code Online (Sandbox Code Playgroud)

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

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

我试图像这样重现它:

  • 在...创建一个新的分支 8cc7371
  • git revert 8cc7371

8cc7371按预期创建具有单个父()的还原提交.

罪魁祸首提交作者使用Atlassian SourceTree而不是本机命令行界面,所以我也尝试使用SourceTree中的恢复功能并获得与上面相同的结果(单亲).

运行一些git命令后b5f9731,我注意到git diff并且git 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
Run Code Online (Sandbox Code Playgroud)

SourceTreeGithub正在显示2个文件.

你可以在这里找到图形的样子:graph.html,以及一些git命令结果:misc.html.

谁能解释一下发生了b5f9731什么?

Nic*_*kin 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
Run Code Online (Sandbox Code Playgroud)

消息取自abcdef.

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