应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

Git不要只会pull和push,试试这5条提高效率的命令

  前言
  使用Git作为代码版本管理,早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送,遇到一些commit管理的问题就束手无策,或者用一些不优雅的方式解决。
  本文分享我在开发工作中实践过的实用命令。这些都能够大大提高工作效率,还能解决不少疑难场景。下面会介绍命令,列出应用场景,手摸手教学使用,让同学们看完即学会。
  stash
  官方文档
  git教程描述
  官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用gitstash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。
  stash命令能够将还未commit的代码存起来,让你的工作目录变得干净。应用场景
  我猜你心里一定在想:为什么要变干净?
  应用场景:某一天你正在feature分支开发新需求,突然产品经理跑过来说线上有bug,必须马上修复。而此时你的功能开发到一半,于是你急忙想切到master分支,然后你就会看到以下报错:
  因为当前有文件更改了,需要提交commit保持工作区干净才能切分支。由于情况紧急,你只有急忙commit上去,commit信息也随便写了个暂存代码,于是该分支提交记录就留了一条黑历史。。。(真人真事,看过这种提交)命令使用
  如果你学会stash,就不用那么狼狈了。你只需要:gitstash
  就这么简单,代码就被存起来了。
  当你修复完线上问题,切回feature分支,想恢复代码也只需要:gitstashapply相关命令保存当前未commit的代码gitstash保存当前未commit的代码并添加备注gitstashsave备注的内容列出stash的所有记录gitstashlist删除stash的所有记录gitstashclear应用最近一次的stashgitstashapply应用最近一次的stash,随后删除该记录gitstashpop删除最近的一次stashgitstashdrop
  当有多条stash,可以指定操作stash,首先使用stashlist列出所有记录:gitstashliststash{0}:WIPon。。。stash{1}:WIPon。。。stash{2}:On。。。
  应用第二条记录:gitstashapplystash{1}
  pop,drop同理。vscode集成
  stash代码
  填写备注内容,也可以不填直接Enter
  在STASHES菜单中可以看到保存的stash
  先点击stash记录旁的小箭头,再点击apply或者pop都可恢复stash
  resetsoft
  官方文档
  git教程描述
  完全不接触索引文件或工作树(但会像所有模式一样,将头部重置为)。这使您的所有更改的文件更改为要提交的更改。
  回退你已提交的commit,并将commit的修改内容放回到暂存区。
  一般我们在使用reset命令时,gitresethard会被提及的比较多,它能让commit记录强制回溯到某一个节点。而gitresetsoft的作用正如其名,soft(柔软的)除了回溯节点外,还会保留节点的修改内容。应用场景
  回溯节点,为什么要保留修改内容?
  应用场景1:有时候手滑不小心把不该提交的内容commit了,这时想改回来,只能再commit一次,又多一条黑历史。
  应用场景2:规范些的团队,一般对于commit的内容要求职责明确,颗粒度要细,便于后续出现问题排查。本来属于两块不同功能的修改,一起commit上去,这种就属于不规范。这次恰好又手滑了,一次性commit上去。命令使用
  学会resetsoft之后,你只需要:恢复最近一次commitgitresetsoftHEAD
  resetsoft相当于后悔药,给你重新改过的机会。对于上面的场景,就可以再次修改重新提交,保持干净的commit记录。
  以上说的是还未push的commit。对于已经push的commit,也可以使用该命令,不过再次push时,由于远程分支和本地分支有差异,需要强制推送gitpushf来覆盖被reset的commit。
  还有一点需要注意,在resetsoft指定commit号时,会将该commit到最近一次commit的所有修改内容全部恢复,而不是只针对该commit。
  举个栗子:
  commit记录有c、b、a。
  reset到a。gitresetsoft1a900ac29eba73ce817bf959f82ffcb0bfa38f75
  此时的HEAD到了a,而b、c的修改内容都回到了暂存区。
  cherrypick
  官方文档
  gitcherrypick教程描述
  给定一个或多个现有提交,应用每个提交引入的更改,为每个提交记录一个新的提交。这需要您的工作树清洁(没有从头提交的修改)。
  将已经提交的commit,复制出新的commit应用到分支里应用场景
  commit都提交了,为什么还要复制新的出来?
  应用场景1:有时候版本的一些优化需求开发到一半,可能其中某一个开发完的需求要临时上,或者某些原因导致待开发的需求卡住了已开发完成的需求上线。这时候就需要把commit抽出来,单独处理。
  应用场景2:有时候开发分支中的代码记录被污染了,导致开发分支合到线上分支有问题,这时就需要拉一条干净的开发分支,再从旧的开发分支中,把commit复制到新分支。命令使用复制单个
  现在有一条feature分支,commit记录如下:
  需要把b复制到另一个分支,首先把commitHash复制下来,然后切到master分支。
  当前master最新的记录是a,使用cherrypick把b应用到当前分支。
  完成后看下最新的log,b已经应用到master,作为最新的commit了。可以看到commitHash和之前的不一样,但是提交时间还是保留之前的。复制多个
  以上是单个commit的复制,下面再来看看cherrypick多个commit要如何操作。一次转移多个提交:gitcherrypickcommit1commit2
  上面的命令将commit1和commit2两个提交应用到当前分支。多个连续的commit,也可区间复制:gitcherrypickcommit1。。commit2
  上面的命令将commit1到commit2这个区间的commit都应用到当前分支(包含commit1、commit2),commit1是最早的提交。cherrypick代码冲突
  在cherrypick多个commit时,可能会遇到代码冲突,这时cherrypick会停下来,让用户决定如何继续操作。下面看看怎么解决这种场景。
  还是feature分支,现在需要把c、d、e都复制到master分支上。先把起点c和终点e的commitHash记下来。
  切到master分支,使用区间的cherrypick。可以看到c被成功复制,当进行到d时,发现代码冲突,cherrypick中断了。这时需要解决代码冲突,重新提交到暂存区。
  然后使用cherrypickcontinue让cherrypick继续进行下去。最后e也被复制进来,整个流程就完成了。
  以上是完整的流程,但有时候可能需要在代码冲突后,放弃或者退出流程:放弃cherrypick:gitscherrypickabort
  回到操作前的样子,就像什么都没发生过。退出cherrypick:gitcherrypickquit
  不回到操作前的样子。即保留已经cherrypick成功的commit,并退出cherrypick流程。revert
  官方文档描述
  给定一个或多个现有提交,恢复相关提交引入的更改,并记录一些这些更改的新提交。这就要求你的工作树是干净的(没有来自头部的修改)。
  将现有的提交还原,恢复提交的内容,并生成一条还原记录。应用场景
  应用场景:有一天测试突然跟你说,你开发上线的功能有问题,需要马上撤回,否则会影响到系统使用。这时可能会想到用reset回退,可是你看了看分支上最新的提交还有其他同事的代码,用reset会把这部分代码也撤回了。由于情况紧急,又想不到好方法,还是任性的使用reset,然后再让同事把他的代码合一遍(同事听到想打人),于是你的技术形象在同事眼里一落千丈。命令使用revert普通提交
  学会revert之后,立马就可以拯救这种尴尬的情况。
  现在master记录如下:
  gitrevert21dcd937fe555f58841b17466a99118deb489212
  revert掉自己提交的commit。
  因为revert会生成一条新的提交记录,这时会让你编辑提交信息,编辑完后:wq保存退出就好了。
  再来看下最新的log,生成了一条revert记录,虽然自己之前的提交记录还是会保留着,但你修改的代码内容已经被撤回了。revert合并提交
  在git的commit记录里,还有一种类型是合并提交,想要revert合并提交,使用上会有些不一样。
  现在的master分支里多了条合并提交。
  使用刚刚同样的revert方法,会发现命令行报错了。
  为什么会这样?在官方文档中有解释。
  通常无法revert合并,因为您不知道合并的哪一侧应被视为主线。此选项指定主线的父编号(从1开始),并允许revert反转相对于指定父编号的更改
  我的理解是因为合并提交是两条分支的交集节点,而git不知道需要撤销的哪一条分支,需要添加参数m指定主线分支,保留主线分支的代码,另一条则被撤销。
  m后面要跟一个parentnumber标识出主线,一般使用1保留主分支代码。gitrevertm1commitHashrevert合并提交后,再次合并分支会失效
  还是上面的场景,在master分支revert合并提交后,然后切到feature分支修复好bug,再合并到master分支时,会发现之前被revert的修改内容没有重新合并进来。
  因为使用revert后,feature分支的commit还是会保留在master分支的记录中,当你再次合并进去时,git判断有相同的commitHash,就忽略了相关commit修改的内容。
  这时就需要revert掉之前revert的合并提交,有点拗口,接下来看操作吧。
  现在master的记录是这样的。
  再次使用revert,之前被revert的修改内容就又回来了。reflog
  官方文档描述
  此命令管理重录中记录的信息。
  如果说resetsoft是后悔药,那reflog就是强力后悔药。它记录了所有的commit操作记录,便于错误操作后找回记录。应用场景
  应用场景:某天你眼花,发现自己在其他人分支提交了代码还推到远程分支,这时因为分支只有你的最新提交,就想着使用resethard,结果紧张不小心记错了commitHash,reset过头,把同事的commit搞没了。没办法,resethard是强制回退的,找不到commitHash了,只能让同事从本地分支再推一次(同事瞬间拳头就硬了,怎么又是你)。于是,你的技术形象又一落千丈。命令使用
  分支记录如上,想要reset到b。
  误操作reset过头,b没了,最新的只剩下a。
  这时用gitreflog查看历史记录,把错误提交的那次commitHash记下。
  再次reset回去,就会发现b回来了。设置Git短命令
  对我这种喜欢敲命令而不用图形化工具的爱好者来说,设置短命令可以很好的提高效率。下面介绍两种设置短命令的方式。
  方式一gitconfigglobalalias。pspush
  方式二
  打开全局配置文件vim。gitconfig
  写入内容〔alias〕cocheckoutpspushplpullmermergenoffcpcherrypick
  使用等同于gitcherrypickcommitHashgitcpcommitHash总结
  本文主要分享了5个在开发中实用的Git命令和设置短命令的方式。stash:存储临时代码。resetsoft:软回溯,回退commit的同时保留修改内容。cherrypick:复制commit。revert:撤销commit的修改内容。reflog:记录了commit的历史操作。
  文中列举的应用场景有部分不太恰当,只是想便于同学们理解,最重要的是要理解命令的作用是什么,活学活用才能发挥最大功效。
  如果你也有一些实用的Git命令也欢迎在评论区分享

再下黑手!雄鹿废掉卡鲁索!722915,字母哥率队大胜公牛今天芝加哥公牛继续坐镇主场迎战密尔沃基雄鹿,上一场比赛公牛主场惨败30分耻辱一战,本场比赛公牛第一节和雄鹿打得难解难分,但第二节比赛公牛又进攻断电,半场结束落后雄鹿15分。……藏在北京城里的小桥流水人家魅力北京大赏北京城里正阳门向南三里远的地方有一条河,故名三里河又因位于城东所以被叫做东三里河以与北京城西的三里河相区分。这里历史上是北京贫民居住的地方,民风纯朴市井……大冷门巴恩斯荣获最佳新秀NBA官方今日公布了猛龙前锋巴恩斯荣获20212022最佳新秀球员奖!在常规赛的大部分时间,莫布里都领跑着新秀榜,在赛季大部分时间的最佳新秀评估中,巴恩斯都落后于莫布利。……凯尔特人10勇士,乌度卡与肖华在拿捏勇士与NBA商业联盟6月3日,NBA2122总决赛凯尔特人对阵勇士如期开打,凯尔特人在勇士主场拿下勇士。乌度卡与肖华在拿捏勇士与NBA商业联盟:乌度卡今天上了泰斯,今年季后赛之前的比赛……北京环球影视城,游客过山车后意外死亡4月22日晚,本周有一名游客在北京环球度假区霸天虎过山车区域,突然紧急状况,园区救助人员使用紧急复苏,AED等措施,送医后不治身亡。同时,暂时关闭该项目,相关部门也进行核查,符……到香山的香山寺北京香山香山寺,早些年是一片废墟,经常爬惯香山的人去香炉峰或双清别墅,从跟前路过大多会忽视它,却不知它已悄悄地被恢复了容颜。在一片参天古树丛林中,找到了西山首游牌楼。过去……油价调整最新消息今天8月12日,9295号汽油预计下调185今年油价经历了5次下跌后,目前来看,第6次下跌也正在酝酿。按照新一轮油价调整的第3个(8月11日)工作日原油变化率数据显示,原油变化率为3。45,预计下调油价185元吨,折合成……传统车企跌倒,新势力吃饱?没想到半路杀出了个奥特能【太平洋汽车网技术频道】交通工具的驱动能源一直是根据技术发展变来变去的,你还别不信,电动车实际上比燃油车出现的还早呢。1886年卡尔本茨搞出了第一辆汽车,但实际上在1834年,……WE达成14连败!转会期还能继续交易选手赚钱吗?游戏马蹄铁原创WE对战BLGWE在今年夏季赛成为了去年的V5,他们目前一胜难求。今天面对BLG,WE也是很意外居然赢了一局,结果给了希望又立刻迎来绝望,在第三局被B……寒门孔雪儿不会吃鱼子酱被群嘲,遭王思聪内涵,活该被骂?只因将鱼子酱一口闷,就引来华少的围观嘲笑,瞬间被冠上乡巴佬的标签,寒门明星孔雪儿没有资本支持混的有多惨?2021年,孔雪儿在参加另一个综艺节目《宝藏般的乡村》时,因为所在……辽篮时隔四年夺冠,姚明为何没有像以往一样亲临现场颁奖?关注NBA的球迷都清楚,篮网在首轮被凯尔特人横扫出局,而在我们的CBA总决赛舞台,同样诞生了一次四比零,那就是辽宁男篮和浙江广厦的较量,时隔四年,辽宁男篮再次捧起总冠军奖杯。进……鸡蛋羹千万不要直接上锅蒸,多加这2个步骤,鸡蛋羹里外都很滑嫩大家好,我是大磊。鸡蛋,一直就是营养食品的代名词,特别是困难年代,国人全靠鸡蛋补充营养,特别珍贵。现在,鸡蛋却是餐桌上常见的食物,无论是炒鸡蛋、蒸蛋还是茶叶蛋,吃着都非常……
世界最佳旅游乡村如何成就?听听它们的成长秘诀小山村何以惊艳大来源:光明日报河南安阳市,游客在红旗渠畔的庙荒村中散步。新华社发游客在浙江杭州市临安区太湖源镇指南村观赏晒秋的农作物。新华社发重庆酉阳县板溪镇叠石花谷景区内,……今天是俱乐部解决债务问题的最后期限,否则不被授予2023准入直播吧2月28日讯根据足协工作安排,2月28日是俱乐部解决债务问题的最后期限。据深足跟队记者程文莉消息,在足协今年度的工作安排中,2023年2月15日至3月5日期间进行新……春吃芽胜过肉,这4种芽菜别忘吃,鲜嫩爽口,遇到千万别手软春天万物生发,顺应时节的吃菜方法,就是多吃一些破土而出的春菜。民间有句谚语叫做:春吃芽、夏吃瓜、秋吃果、冬吃根。春季正是吃芽菜的好时节!芽菜破土而出,不但有清热解毒的功效……张一山,哪儿去了?导读:近日看到一则新闻,说前几年大火的张一山,最近一两年为何销声匿迹,很少听到他的消息了?有网友说他是被封杀了,也有网友认为,他这是被背后的资本抛弃了,在我看来这些似乎都不是主……弘一法师要学会放过自己,走太多,疼的是脚,想太多,累的是心弘一法师曾说:人啊,就要学会放过自己,别整天胡思乱想,这该来的,依然会来,谁挡也挡不住,这不是你的,总会走,你留也留不住。众生皆苦,世人难渡,你又何必想那么多呢。这……最大的财富就在你身体里!疫情三年,很多朋友抱怨荷包瘪了,生计堪忧。都在盼望这次结束后,尽快有一个重新的开始,做回原来的样子。的确,疫情让我们已经习惯的工作、生活模式中断。终于,三年的灾厄就要结束……为什么男孩子现在不穿三角裤改穿平角裤了?我记得小时候还没发育的时候,穿的就是平角裤。那时候是90年代左右,大家成年人基本上还是穿三角裤为主。那时候就非常向往着自己有一天能够跟大家一样长大也能够穿上这样的裤子。慢慢的等……拼多多3。8大促启动,一键拼购大牌好物90后的陈子墨决定趁着三八节给自己购买一部新手机,超前上线的拼多多3。8大促吸引了她的注意力。2月28日拼多多启动3。8大促,活动将持续至3月9日。大促期间推出一系列优惠……我国大型巡天空间望远镜预计今年发射300倍于哈勃视野2022年底我国正式建成了天宫号空间站,目前还有神州十五号航天员在空间站工作,再往后空间站可能跟还会多一个大家伙,那就是我国自己研发的CSST大型巡天空间望远镜,预计今年发射。……加冕在即,距离詹姆斯历史得分第一还剩2场比赛预计湖人主场登顶仅需36分,詹姆斯就可以在自己传奇的职业生涯中,用NBA历史得分王的荣誉为自己的传奇续写辉煌。北京时间2月5日7:00举行了NBA湖人对鹈鹕的比赛,最终湖人以126比13……热搜第一!这下网友坐不住了1月16日爱奇艺被曝禁止HDMI连线播放引热议冲上微博热搜第一此前,据不少网友反馈,爱奇艺App开始对投屏功能作出限制,之前黄金VIP会员支持最高4K清晰度投屏,现在只能……利津县盐窝镇中心幼儿园北岭分园开展让传统民间游戏在幼儿园绽放游戏是孩子童年生活不可缺少的一部分,而传统游戏有着悠扬的历史文化底蕴,为让幼儿返璞归真,感受传统游戏的魅力,3月24日,利津县盐窝镇中心幼儿园北岭分园开展让传统民间游戏在幼儿园……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网