gpt4 book ai didi

git - 我可以恢复在交互式 rebase 期间丢失的提交吗?

转载 作者:行者123 更新时间:2023-12-02 15:54:21 25 4
gpt4 key购买 nike

所以我遇到了这种奇怪的情况。

我正在对 4 次提交进行交互式 rebase 。我试图压扁,但我做错了,我得到了以下错误:

error: cannot 'squash' without a previous commit You can fix this with
'git rebase --edit-todo' and then run 'git rebase --continue'. Or you
can abort the rebase with 'git rebase --abort'.

我决定运行 git rebase --edit-todo,当我这样做时,只显示最后一次提交。我将它从 squash 更改为 pick,并运行 git rebase --continue 但现在看来我试图压缩的其他 3 个提交已经不存在了。
所以我早上的工作似乎丢失了。
一定有办法恢复它们,对吧?
我该怎么做?

最佳答案

这是 Git。什么都不会丢失。整个 rebase 是不可撤销的!

只需使用git reflog 来定位你在rebase 之前所在的位置。很明显它是哪一个,因为第一个将描述 rebase 。

现在只需重新设置该提交即可。 Presto,你已经撤消了 rebase。

现在只需在下次正确执行 rebase 即可。


例子。我从这种情况开始:

* 18c9859 (HEAD -> what) zz
* e1af86b yy
* 47853b7 xx
* 45ebca0 (origin/main, origin/HEAD, main) zzz

我交互式 rebase ,清除 yyxx

% git rebase -i main
Successfully rebased and updated refs/heads/what.

现在的情况是:

* e2d37cd (HEAD -> what) zz
* 45ebca0 (origin/main, origin/HEAD, main) zzz

但这不是我想做的! xxyy 不见了!哦,鼻!

但是等等。没问题。我们可以撤消。首先,查看 reflog:

% git reflog
e2d37cd (HEAD -> what) HEAD@{0}: rebase (finish): returning to refs/heads/what
e2d37cd (HEAD -> what) HEAD@{1}: rebase (pick): zz
45ebca0 (origin/main, origin/HEAD, main) HEAD@{2}: rebase (start): checkout main
18c9859 HEAD@{3}: commit: zz [this is it]
...

好的,撤消:

% git reset --hard HEAD@{3}

全部修复!我完全回到了 rebase 之前的位置:

* 18c9859 (HEAD -> what) zz
* e1af86b yy
* 47853b7 xx
* 45ebca0 (origin/main, origin/HEAD, main) zzz

派对开始!

关于git - 我可以恢复在交互式 rebase 期间丢失的提交吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71750366/

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