美文网首页
记住 git 的2条命令,以后可能救你一命

记住 git 的2条命令,以后可能救你一命

作者: wharlim | 来源:发表于2017-11-24 14:58 被阅读0次

在本地添加了多个远程仓库后,有时会出现本地分支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. 8f17e95 HEAD@{28}: commit (merge): Merge branch 'dev' into wxl/dev_3.6.0

2. f5c2290 HEAD@{29}: checkout: moving from dev to wxl/dev_3.6.0

3. b5d537e HEAD@{30}: reset: moving to b5d537e

4. 189e4d3 HEAD@{31}: commit (merge): Merge branch 'wxl/dev_3.6.0' into dev

5. b5d537e HEAD@{32}: pull origin_newchic dev: Fast-forward

6. e12032b (wxl/dev_3.6.0) HEAD@{33}: checkout: moving from wxl/dev_3.6.0 to dev

7. f5c2290 HEAD@{34}: commit: freegift rtl 翻转

8. 5fb503d HEAD@{35}: checkout: moving from wxl/feature_3.7.0_cate to wxl/dev_3.6.0

9. 60f37b2 (origin_newchic/wxl/feature_3.7.0_cate, origin/wxl/feature_3.7.0_cate, wxl/feature_3.7.0_cate) HEAD@{36}: checkout: moving from wxl/feature_cate to wxl/feature_3.7.0_cate

10. 585e703 (origin_newchic/wxl/feature_cate, origin/wxl/feature_cate, wxl/feature_cate) HEAD@{37}: checkout: moving from wxl/dev_3.6.0 to wxl/feature_cate

11. 5fb503d HEAD@{38}: commit (amend): adword 小改,秒杀添加统计

12. 69078ac HEAD@{39}: commit: adword 小改

13. 514a570 HEAD@{40}: commit: 支付成功,统计修正入口位置

14. f608d5b (origin_newchic/wxl/dev_3.6.0, wxl/dev_3.5.3) HEAD@{41}: checkout: moving from dev to wxl/dev_3.6.0

15. e12032b (wxl/dev_3.6.0) HEAD@{42}: pull origin_newchic dev: Fast-forward

16. 5c36b13 (origin/dev) HEAD@{43}: checkout: moving from wxl/dev_3.6.0 to dev

```

在第15行记录可以看到,错误地 pull 了其它分支,期间 commit 了几次,在第1行记录还可以看出,把其它分支 merge 了过来。

后面用 git reset --hard f5c2290 来回退几个操作的时候,虽然命令显示已经退回到那个点,但 wxl/dev_3.6.0 整个分支的内容都不见了,这就触及我的知识盲区了。先 Mark,以后碰到类似的情况再研究。

```

1. f5c2290 HEAD@{27}: reset: moving to f5c2290

```

还好,wxl/dev_3.6.0 分支的内容不多,赶紧新建个 recover 分支,用 git reflog 显示记录后,再用 git cherry-pick 一个一个地 pick 过来。

```

1. f1d674e HEAD@{15}: cherry-pick: freegift rtl 翻转

2. fded62a HEAD@{16}: cherry-pick: adword 小改,秒杀添加统计

3. f1254ff HEAD@{17}: cherry-pick: adword 小改

4. 485d054 HEAD@{18}: cherry-pick: 支付成功,统计修正入口位置

5. f608d5b (origin_newchic/wxl/dev_3.6.0, wxl/dev_3.5.3) HEAD@{19}: checkout: moving from wxl/dev_3.5.3 to wxl/dev_recover

```

> 总结:

> 遇到分支或 commit 丢失的情况,先用 git reflog 显示 commit 的记录,再用 git cherry-pick xxxxxxx 来合并丢失的内容。这对组合命令几乎可以应对任何情况,但修改了内容而没有 commit 起来的我也没办法了。

相关文章

  • 记住 git 的2条命令,以后可能救你一命

    在本地添加了多个远程仓库后,有时会出现本地分支Track(追踪) 不了对应的远程分支的情况(可能是 source ...

  • 高楼失火是往上跑还是往下跑?无意间的阅读,可能救下自己!! !

    高楼失火是往上跑还是往下跑呢?记住这些东西!关键时刻可能会救你一命! (一)在公司 想必有很多人的工作地点是在高层...

  • 常用 Git 命令清单

    Git 日常使用只要记住下图6个命令,就可以了。 熟练使用,恐怕要记住60~100个命令,下面常用 Git 命令清...

  • 常用 Git 命令

    我们每天使用 Git ,但是很多命令记不住,这里列出日常可能会使用的一些git命令,方便以后查阅。 git名词解释...

  • Git 常用的命令

    1、查看帮助:git --help 2、查看某一命令帮助:`git add -h 二、基础配置 需要配置:user...

  • Linux中idea,android-studio配置git

    首先你得先安装了git,如果没有的话先安装,比如我就是 yaourt git。命令行中which git,然后记住...

  • git常用命令

    Git常用命令 在上面有这样一张图片,基本上日常使用记住这6个命令就可以了,但是要想熟练使用,可能就需要记住更多命...

  • Git常用命令

    一、Git交互流程和基础命令 Git的命令有很多,我们不一定要全部记住。在理解下图Git各个部件之间的交互流程后,...

  • 常用 Git 命令清单

    常用 Git 命令清单每天使用 Git ,但是很多命令记不住。 一般来说,日常使用只要记住下图6个命令,就可以了。...

  • Git bisect - debugging with git

    git bisect 快捷记忆:如何记住这个命令:binary search commit --》 bisectb...

网友评论

      本文标题:记住 git 的2条命令,以后可能救你一命

      本文链接:https://www.haomeiwen.com/subject/ylcfbxtx.html