最近在工作中,我们使用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.
此问题已通过从祖先提交创建新分支并在该新分支之上应用一些补丁来解决。
所以我不需要帮助来解决这个问题,我只想了解恢复提交如何也可以是合并提交,发生了什么,以及如何重现这种奇怪的行为。 < / p>
我试图像这样重现:
8cc7371
8cc7371
它按预期创建一个具有单个父级(8cc7371
)的还原提交。
罪魁祸首提交作者使用Atlassian SourceTree而不是本机命令行界面,因此我也尝试在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
发生了什么吗?
答案 0 :(得分: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
。它有两个来自合并提交的父项和来自还原提交的消息。
答案 1 :(得分:-1)
从本地分支恢复提交的步骤如下: -
1)执行&#34; git log -1&#34;命令git bash 2)获取&#34;已提交的GUID&#34;从上面的命令 3)执行&#34; Git reset --hard committed GUID&#34;命令git bash