gpt4 book ai didi

git rebase 吃掉了我的提交!为我翻译 'git reflog' 输出?

转载 作者:太空狗 更新时间:2023-10-29 14:00:32 27 4
gpt4 key购买 nike

我已经完成了五次提交,我想在推送它们之前将它们全部 merge 为一次提交。出于某种原因,我决定尝试用一种不同于我通常使用的方式来做到这一点。

FWIW:我试图按照此处的说明进行操作 http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html .

我将在下面提供很多细节,但您可能想跳到问题的底部,我把 git reflog 的输出放在哪里,因为我怀疑这才是这里的重要内容。

所以这就是我所做的 - 我所做的所有更改:

git rebase -i HEAD~5

我看到了显示提交的文本编辑器,我现在意识到错误地将“pick”的所有第一列值更改为“squash”。

然后我看到一条错误消息。令我遗憾的是,我不记得错误消息说了什么,但我认为它说的是“您没有 promise 使用”之类的话。

那时我回到了提示,当我尝试重复:

git rebase -i HEAD~5

我收到消息:

It seems that there is already a rebase-merge directory, and
I wonder if you are in the middle of another rebase. If that is the
case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please
rm -fr /home/foo/dev/bar/.git/rebase-merge
and run me again. I am stopping in case you still have something
valuable there.

然后我读了这个答案https://stackoverflow.com/a/12163247/364088这建议做:

git reset --soft HEAD^

我做到了(我希望我没有)。在我完成之后。

git status

虽然显示了许多未提交更改的文件

git diff

没有变化。不管怎样,我做了一个

git commit

现在我已经失去了最后五次提交中的所有更改!

git reflog

显示(这只是它的顶部):

3f80e4b HEAD@{0}: commit: Decorator demo added
1888dd9 HEAD@{1}: reset: moving to HEAD^
7d6228e HEAD@{2}: checkout: moving from master to 7d6228eb9b03d0c45acf7c66e662220213cf4fb9
705736f HEAD@{3}: commit: Snapshot commit - squash later
75db0c3 HEAD@{4}: commit: Snapshot commit - squash later
b70b50f HEAD@{5}: commit: Snapshot commit - squash later
d970a62 HEAD@{6}: commit: Snapshot commit - squash later
0f24e88 HEAD@{7}: commit: Snapshot commit - squash later
7d6228e HEAD@{8}: commit: Move some standard code into its own module and tidy up .
1888dd9 HEAD@{9}: commit: Early version of the decorators demo

所以问题是标记为“快照提交 - 稍后压缩”的提交是我想要 merge 到单个提交中的提交。

提交 HEAD@{2} 和 HEAD@{1} 是我在尝试 merge 那些“快照提交 - 稍后压缩”的过程中所做的事情。提交 HEAD@{0} 是我在 rebase 和重置之后所做的提交。

以防万一,最后推送的提交是 HEAD@{8}。

所以我想要的是回到“705736f”提交,然后,理想情况下再次 merge 提交,只有这一次才能正常工作!

如果我能恢复“快照提交 - 稍后压缩”更改中的工作,我会非常高兴。

非常感谢您的建议。

最佳答案

我的首选方法是在你想要取回的东西上贴上标签,比如 Twig :

git branch recover 705736f

此时你可以检查它(这是一个新的本地分支)并确保你已经恢复了你想要的:

git checkout recover
git log # or gitk, or whatever

这是一个新的分支标签,指向旧的(pre-rebase-attempt)提交。

您的新提交(Decorator demo added)将在另一个分支上,该分支(在图形日志查看器中,如 gitk --branchesgit log with --graph) 在 Early version of the decorators demo commit 之后 fork 。


如果您愿意“丢失”(reflog 中除外)新提交,您可以强制将当前分支重置为 reflog 中的旧提交:

git reset --hard 705736f

(而不是创建指向 705736f 的新分支)。再次运行 git log 以查看是否是您想要的位置(您甚至可以先 git log 705736f!)。

关于git rebase 吃掉了我的提交!为我翻译 'git reflog' 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22191901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com