作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
最近在工作中,我们在使用 git(和私有(private) github 存储库)进行版本控制的项目中丢失了一些代码。
我使用 git bisect
找到了罪魁祸首的提交,我真的很惊讶地发现它看起来像一个恢复提交,但也有两个像 merge 提交这样的 parent :
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.
此问题已通过从祖先提交创建新分支并在该新分支上应用一些补丁来解决。
所以我不需要帮助来解决这个问题,我只是想了解恢复提交如何也可以是 merge 提交,发生了什么,以及如何重现这种奇怪的行为。
我试着像这样重现它:
8cc7371
创建一个新分支8cc7371
它按预期创建了具有单个父级 (8cc7371
) 的还原提交。
罪魁祸首提交作者使用 Atlassian SourceTree 而不是 native 命令行界面,因此我也尝试使用 SourceTree 中的还原功能并得到与上述相同的结果(单亲)。
在 b5f9731
上运行一些 git 命令后,我注意到 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
SourceTree和 Github正在显示 2 个文件。
您可以在此处找到图表的样子:graph.html ,以及一些 git 命令的结果:misc.html .
谁能解释一下 b5f9731
发生了什么?
最佳答案
我想到了什么:
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
。它有两个来自 merge 提交的父项和来自还原提交的消息。
关于git - 还原提交如何也是 merge 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30819564/
我是一名优秀的程序员,十分优秀!