You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

交互式变基未完成时切换分支,修改内容丢失的问题求助

找回你丢失的修改

别慌,你的修改其实没真丢,只是Git在分支切换时把工作区恢复到了变基前的状态,但你通过commit --amend生成的提交还好好躺在Git的对象数据库里。按下面的步骤操作就能找回来:

1. 确认变基进程是否还在运行

先执行这个命令看看当前状态:

git status

如果输出里有类似interactive rebase in progress; onto xxxxxxx的提示,说明变基还没中断,只是工作区被临时重置了。

2. 定位你修改后的提交

git reflog查看所有操作记录(包括那些没被分支引用的隐藏提交):

git reflog

在输出里找带有(amend)标记的条目,它对应的哈希值就是你修改后的提交。比如可能会看到这样的行:

abc1234 HEAD@{2}: commit (amend): 你的提交信息

3. 恢复A文件的修改内容

把找到的哈希值(比如上面的abc1234)代入下面的命令,提取出A文件的修改后版本:

git checkout abc1234 -- A

执行完这条命令,A文件就会恢复到你修改后的状态了。

4. 继续完成交互式变基

确认A文件内容没问题后,执行下面的命令完成变基:

git rebase --continue

这样你的修改就会正式合并到foo分支里了。

为啥会出现这个问题?

当你在交互式变基过程中(还没执行git rebase --continue),Git其实是在一个临时的游离HEAD状态下处理提交。此时切换到其他分支,Git会把当前工作区和暂存区重置为目标分支的状态,但变基的进度会保留在.git/rebase目录中。切回foo分支时,Git会回到变基进程,但工作区会被重置为变基开始时的状态,所以你之前的修改看起来“消失”了——但实际上那个修改的提交一直存在,只是没被当前工作区引用而已。

内容的提问来源于stack exchange,提问作者Mikhail

火山引擎 最新活动