那些不常用的Git高级命令

本文首发于个人博客 https://maclaren0920.github.io

那些不常用的Git高级命令

Git作为版本控制管理工具的顶流,时至今日已经成为前后端开发必不可少的一项技能,掌握Git是开发工程师们的必备需求。但是大部分日常使用的都是写比较基础的命令,对于有些高级命令有些使用Git多年的开发人员可能都从未用过,所以本文的目的就是带你了解几个不常用但是非常有用的高级命令。

git stash

git stash命令可以用于将工作区和暂存区未提交的修改进行保存。

假如你正在feature分支上开发中,突然你的leader告诉你dev分支有一个紧急的bug需要你去修复,但是你在feature分支上的功能还没开发完成,这个时候你只能把feature分支未开发完成的代码先提交,再切换到dev分支去修复它,那么有没有其他办法呢?

那就是用git stash命令将工作区的修改进行保存,当你执行完git stash命令后,再执行git status你会发现你之前在工作区的修改全部被取消了,你的工作区是干净的,这个时候你就可以直接切换到dev分支进行开发,当你在dev分支的bug修复完成之后,再切换回feature分支再执行git stash pop就可以将之前在feature分支未开发完成的修改还原回来,然后就可以继续开发了。

git stash作用其实就是将未commit的修改操作保存在堆栈中。

git stash主要有以下几个参数:

  • git stash 将未commit的修改操作保存
  • git stash list 列出已保存的记录
  • git stash pop 将最近保存的一条记录还原到工作区,并且从list中删除
  • git stash apply 将最近保存的一条记录还原到工作区,并且不删除list中的记录
  • git stash clear 清空list中的是所有保存记录

git cherry-pick

git cherry-pick的作用就如其名摘樱桃,见名知意,就是将某个分支中的某个commit转移到另一个分支中。

你在dev1分支中开发完成一个功能,现在有个需求需要将dev1分支上这功能挪到dev2分支中,但是dev1和dev2两个分支的功能并不同步,所以不能直接在dev2分支的基础上直接合并dev1分支,这个时候就可以用cherry-pick这个命令。

首先在dev1分支上使用git reflog命令找到提交该功能的这commit id,它是一个hash值,

将其copy出来,再切换到dev2分支,使用cherry-pick命令:

这样dev1分支中该功能的commit修改记录就成功转移到了dev2分支上。

以上操作cherry-pick只是转移了一个comit记录,该命令也支持同时转移多个commit,只需要用空格隔开即可。

git cherry-pick xx1 xx2 xx3

除此之外,cherry-pick命令参数还可以是一个分支名,此操作会将该分支最新的一次提交转移过去。

git cherry-pick dev3

git rebase

git rebase命令主要有两种功能:

  • 合并commit
  • 合并分支

合并commit

合并commit是比较常见的需求,我在开发一个模块时同时产生了3个commit记录,这3次记录都针对该模块的,对于后面两次来说是没必要的记录,这里可以使用git rebase命令来将这三个commit合并成一个。

首先使用git log命令找到需要合并的这三个commit之前的那个commit id,

然后使用git rebase命令:

git rebase -i 1ed74ac3c35c4f78f7eff2b61c22b6346cb68296

这时会出现一个交互命令窗口,这里我们将3个commit合并成一个,那么将第二三个commit id前面的pick改成squash,

改完之后wq保存,会出来另外一个弹窗,需要重新修改commit message,修改完成之后wq保存,git log你会发现之前三个commit成功合并成了一个。

提交记录一下子变干净了。

合并分支

合并分支通常是使用git merge命令,但是git merge有个问题,就是提交记录产生多条,而git rebase可以让commit记录变成一条整齐的git flow。

现在需要将main分支合并到dev1中,首先将main分支更新到最新,然后切换到需要rebase的分支dev1,执行git rebase main

你会发现main分支中的commit修改记录成功转移到了dev1分支上,并且并没有新增commit,查看下commit提交记录,git flow是一条整齐的git flow。

总结

以上介绍几个并不是很常用的Git高级命令,虽然并不是非常常用,但是在关键时刻却能达到事半功倍的效果,以上命令只是做了基础使用介绍,其他更多高级用法可以参考查询官方文档和其他资料。

参考

《Git权威指南》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容