在本地添加了多个远程仓库后,有时会出现本地分支Track(追踪) 不了对应的远程分支的情况(可能是 source 的 bug)。
举个例子
本地有 A,B两个分支,在 source 切到 B 分支后,pull 远程最新 commit 下来,由于 source 上没及时的把远程的 B 分支显示出来,误操作 pull 了远程的 A 分支下来,也没提示警告或错误,然后在B 分支提交了几个 commit,并且切到 A 分支,把 B 分支merge 后,才意识到有问题。当时心里想,小事一桩,用 git reflog 和 git reset 就足够了。
看下事故现场 git reflog 记录
1 | 1. 8f17e95 HEAD@{28}: commit (merge): Merge branch 'dev' into wxl/dev_3.6.0 |
在第15行记录可以看到,错误地 pull 了其它分支,期间 commit 了几次,在第1行记录还可以看出,把其它分支 merge 了过来。
后面用 git reset –hard f5c2290 来回退几个操作的时候,虽然命令显示已经退回到那个点,但 wxl/dev_3.6.0 整个分支的内容都不见了,这就触及我的知识盲区了。先 Mark,以后碰到类似的情况再研究。
1 | 1. f5c2290 HEAD@{27}: reset: moving to f5c2290 |
还好,wxl/dev_3.6.0 分支的内容不多,赶紧新建个 recover 分支,用 git reflog 显示记录后,再用 git cherry-pick 一个一个地 pick 过来。
1 | 1. f1d674e HEAD@{15}: cherry-pick: freegift rtl 翻转 |
总结:
遇到分支或 commit 丢失的情况,先用 git reflog 显示 commit 的记录,再用 git cherry-pick xxxxxxx 来合并丢失的内容。这对组合命令几乎可以应对任何情况,但修改了内容而没有 commit 起来的我也没办法了。