所以我有這個奇怪的情況。
我正在對 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 個提交不再存在。
所以我早上的作業似乎丟失了。
一定有辦法恢復這些,對吧?
我該怎么做?
uj5u.com熱心網友回復:
這是吉特。什么都不會丟失。整個變基是不可撤銷的!
只需用于git reflog定位您在變基之前所在的位置。很明顯它是哪一個,因為第一個將描述變基。
現在只需重新設定為該提交即可。Presto,你已經撤消了變基。
現在只需在下一次正確執行 rebase 即可。
例子。我從這種情況開始:
* 18c9859 (HEAD -> what) zz
* e1af86b yy
* 47853b7 xx
* 45ebca0 (origin/main, origin/HEAD, main) zzz
我互動式 rebase,清除yy和xx.
% git rebase -i main
Successfully rebased and updated refs/heads/what.
現在的情況是:
* e2d37cd (HEAD -> what) zz
* 45ebca0 (origin/main, origin/HEAD, main) zzz
但這不是我的本意!xx消失了yy!哦,諾斯!
可是等等。沒問題。我們可以撤消。首先,查看 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
派對!
uj5u.com熱心網友回復:
你應該:
git reflog
# Write down the lost commit hash
git cherry-pick <LOST_COMMIT_HASH>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/456761.html
