一份值得收藏的 Git 异常处理清单

一份值得收藏的 Git 异常处理清单

这是第 53 篇不掺水的原创,想获取更多原创好文,请扫 上方二维码重视咱们吧~

本文首发于政采云前端团队博客:一份值得收藏的 Git 异常处理清单

一份值得收藏的 Git 异常处理清单

前言

Git 作为一种分布式版别控制系统现已成为现在开发的宠儿,不仅应用在前端、后端、客户端等开发场景中,也成为各行业互联网企业分工协作的必备技能之一。K s ~ # V J +

咱们在运用进程中总会碰到这样那样的问题,本文首要针对以7 N Y H M D , +下常常发生的几种异常情况供给一些处理方案:

  1. 本地作业区文件康复

  2. 长途分支删去后,删去本地分支与其相关

  3. 修正~ k c W ; X N提交时的补白内容

  4. 修正分支名,完成无缝衔接

  5. 撤回提交

  6. 吊销本地分支兼并

  7. 康复误删的本地分支

  8. 不确定哪个分支有自己提交的 commit

(一)本地作业区文件康复

咱们都知道,一个文件夹中的文件假如被删掉了,那只有在垃圾箱里边找了。假如H H ~ : P x u垃圾箱里边的也被删掉了,以笔者的知识在不借助工具的情况下怕是就找不到了,emmmm。。。

不过,相关了 Git 的文件和文件夹就不相同了,有了本地库房和长途库D _ $房的两层保护,找到一个被删去的文件也不过就分& + w e & + h F分钟,一个指令行的事情吧。

语法git checkout <filename/dirn, 9 f h C * 9ame>

指令git checkout 1.js

这一指令首要用于本地作业区文件的撤回,下图是一个作业区文件被删去后的完美康复进程。

一份值得收藏的 Git 异常处理清单

(二)长途分支删去后6 W = ( @,删去本地分支及相关

为便利分支提交,一般情况下会用! ` Z q F V # n V本地指令 git branch --set-upstream-to=origin/master master 树立本地分z 5 J C支与长途分支的相关,从 master 拉出的分支可以主动树立与长途已有分支的相关,这样+ 9 J { S l n !可以很便( h 7 ( I e 9 k @利的运用 git pullgit push 拉取长途分支的代码和将本地分支提交到长途。( & i W J

Gi7 { 4 M _ E G 2t 长途分支删去之后,本地分支就无法成功推送到长途,想要重新树立与长途库房的相关,就需求先删去其本| 1 i Z N W ! | @来的与已删去的长途分支的相关。

如下图所示,需求删去的长途分支为 feature/test,运用 git push origin --delete feature/test 删去掉对应的长途分支之后,删去本地分支相关。

一份值得收藏的 Git 异常处理清单

语法g{ 0 |it branch --unset-upstream <branchname>

指令git branch --unset-upstream feature/test

删去掉L n g M = ,相相关系之后,用 git branch -vv 指令可查看到本地o ? H 1 l B s `分支与长途分支的相相关系如下图所示,可观察到 feature/test 分支现已没有相关的长途分支了。

一份值得收藏的 Git 异常处理清单

(三)修正提交时的补白内容

平时提交代码很多时分由于军情紧急,会在刚提交的时分填写了自己不太满足的补白,但笔者自己有点强迫症,必m N d I q { m定要把它改成想要的o z d m } M q f样子咋办。。。。,不要/ k B J慌,仍是有处理办法滴!

想要修正最近一次提交的“修正xxx功能”的补白:

一份值得收藏的 Git 异常处理清单

语法git commit --amend

指令git commb b 9 = Y p I Yit --amend

一份值得收藏的 Git 异常处理清单

运用 git lo) k ?g --pretty=onelE N n 8 (ine 查看内容,发现现已成功修正啦。需求留意的是此项指令会修正提交时O Y ;的commit-id,即会掩盖本来的提: ) i I C J e 4 C交,需求慎重操作

(四)修正分支名,完成无缝衔接

开发中的大佬都是具有极快手速的人,建了个分支一不小心打错了某个字母或许两o $ / k W ~ z个字母打反了,或许就与本意存在较大误差了,Git 供给一种现已拉取A k M C 5 (了分支,在上面开发了不少的内容,6 x – i T C但后来发现本来拉的分支姓名就有问题的修复办法。

例如,咱们的想新建的分支名为 feature/story-13711,却写成了 feature/stor-13711:

语法git branch -m <oldbranch>% V Y R m - 8; <newbranch>

指令+ u | W B fgit branch -m feature/stor-137u ! P ! b11 feature/story-13711

一份值得收藏的 Git 异常处理清单

履行完之后发现文件的作业区已修正内容一点都没有改动,真r k 8 l W I Z #实的完成了无痛过渡,皆大欢喜!

(五)撤回提交

日常作业o s ) r x l + Q J中,或许由于需求改动、或许误操作等原因需求进行提交的撤回:

如下剖析了各种原因吊销的场景,首要包括:

  • 已将更改交到本地存储,需求撤回提交

  • 用新的提n r s m S a = U交内容替换上一次的提交

  • 本地提交了过错的文件

已将D i w N O 9 G更改提交到本地,需求撤回提交

语法git reset --soft [<commit-id&gl E S ^ v 0 It;/HEz ) 5 0 s LAD~n@ 2 k p +>]

指令giv k v b ^ l _ Ft reset --soft HEAD~1

指令履行完成后,查看文件改动记载,可k 9 c K % v发现如下图所示:8 g T ( _ 0

一份值得收藏的 Git 异常处理清单

文件改动记载与未提交之前的文件改动记载是一致的,仅仅吊销了 commit 的操作。

用新的更改替换撤回的更改

提交之中 e 6 T : E M F或许有些当地需求优化,咱们可以吊销本次的 commit 以及文件暂存状况,修正之后再重新添W = _ / w } j O加到暂存区进行提交。

语法git reset --mixed [<commit-id>/HEAD~n>]

指令git reset --mix} s / 7 K / , Xed HEAD~1

指令履行完成后,查看文件改动记载,可发现如下图所示:

一份值得收藏的 Git 异常处理清单

已改动的文件都未添加到暂存区,吊销了 comm6 I 0 U Ait 和 add 的操作。

本地提交了过错的文件

本地将完全过错的,本不应提交的内容提交到了库房,需求进行吊销,可以运用 –hard 参数

语法git reset --hard [<commit-id>/HEAD~n>]

指令git7 n w ~ ! N reset --hard HEAD~1

指令履行完成后,查看文件改动记载,可发现如下图所示:

一份值得收藏的 Git 异常处理清单

已追寻文件的改动内容都消失了,吊销了 commit 和 add 的操作,同时吊销了本地已追寻内容的修正;未追寻的内容不会被改动。从上面的作用可以看到,文件的修正都会被吊销。-hard 参数需求慎重运用

(六)吊销本地分支兼并

实际操作中,总会有很多的干扰,导致咱们兼并了并不应兼并的分支到目标分支上。处理这种问= ^ o题的方法有两种,git resetgit revert。 reset 的语法和指令之前现已介绍过,不做赘述, revert 的语法和指令和 reset 一致。可是发生的实/ ; : U Z V ? b s际作用会有不同。

可以先来看下 revert 操作的实际作用,兼并分支之后的作用如下图所示:

一份值得收藏的 Git 异常处理清单

吊销兼并:

语法git reva 7 } # - h m Mert <commit-id>

指令git revert 700920

下图为履行指令后的作用:

一份值得收藏的 Git 异常处理清单

经过前后比照可知,revertV a m a * l T 履行之后会在本来的记载中新增@ 8 J 5 H K x Y d一条提交记载。

reset 如上 “本地文件吊销” 例子所述,会删去掉本来已有的提交记载,在兼并分支中,会删去本来兼并分支的记载。revert 则有不同,会保存本来兼并分支的记载,并在其上新增一条提交记载,便于之后有需求依然可以回溯到 revert 之前的状况F L t

从需求提交到长途分支的角度来讲– 8 i V 9 ] s z l,reset 可以“毁尸灭迹”,不让他人发现咱们曾经过错的兼并过分支(注:多人协作中,需求慎重运C z R);revert 则会将兼并分支和撤回记载Q 9 J / j !同时显现在长途提交记载上。

(七)康复误删的本地分支

本地分支拉取之后,由于疏忽被删去,而且本地的分支并没有被同步到长途分支上,此刻想要康复本地分支。

误删的分支为 feature/delete,运用 git reflog 指令可查看到该库房下的一切历史操作,如下图所示:l F t , E

一份值得收藏的 Git 异常处理清单

语法git checkou] = Rt -b <bE & r 7 !ranch-name> <commit-id>

指令git checkout -b feature/delete HEAD@{2}

指令履行完成后,分支康复到 HEAD@{2} 的快照,即从 master 分支拉取 feature/delete 分支的内容,依然缺少“新增xxx文件”的提交,直接将文件内容康复到最新的提交内容,运用指令 git reset --hard HEAD@{1} 即可~ o R : s完成硬性掩盖本地作业区内容的目的。git reflog 指令获取到的内容为本地库房一切发生过的改动,可谓康复利器,既可向前追溯,亦可N { ? )向后调整,满] y Q满的时光追溯器的j Q z . . 9 1赶脚啊。。。

(八)不确定哪个分支有自己提交的 com3 8 z W `mit

作业中会常常碰到一种场景,某个提l ; S k S l交先后兼并到了各个分支上,但后来 V c V t b i发现提交的这个修正是有问题的,需M / R X求排查p 8 3 | : U究竟哪个分支包含这个提交,然后将其修复掉。p ` U ~ ]

需求先确定有问题W Q N Z ! y v _ *的提交的 cm 1 S N ! N T |ommiS u z ! ^t-id :

一份值得收藏的 Git 异常处理清单

然后查看本地一切的分支:

一份值得收藏的 Git 异常处理清单

可以看到本地有 4 个分支,本地的分支数量非人为控制的,在运用状况的分支直接删掉也不合适,分支数量到达必定程度,一个一个分支查找也不现实。Git 供给了一种a T 1 ~ (可以直接经过 commit-_ r lidB ! ~ t 1 ^ K q ; 查找出包含该内容分支的指令。

语法git branch --contains <commit-id>

指令git branch --contains 700920

指令履行后可以看到包含该问题提交的分支如t p c A ) U z 4 _下图所示,就可以很便利的在对应分支上修复内容啦。

一份值得收藏的 Git 异常处理清单

总结

本文介绍的是实际作业场景中或许呈现的m e u @ J 5 @几种异常情况及处理方法,期望可以对咱们有所帮助,不足之处敬请纠正。实际上现在现已有很 0 D J R多 Git 操作对应4 V ! a 9 3 $的工具可以运用,需求了解的是工具中的每个操作等同于 Git 指令行的哪个指令,会有什么样的成果,以防止一些不必要发生的过错。

参考文献

Git 过错集锦和修复办法

Git 中.gitignore的装备语法

git r1 ] b neY L } @ * &set 和 git revert

推荐阅览

图解 HTTP 缓存

或许是最全的 “文本溢出切断省略” 方案合集

图文并茂,为你揭开“单点登录“的神秘面纱

招贤纳士

政采云前端团队(ZooTeam),一个年青富有热情和发明力的前端团队,隶属于政采云产品研发部,Base 在风景如画的杭州。团队现有 50 余个前端小伙伴,平均年龄 27 岁,近 3– ! N Y m R 成是全栈工程师,妥妥的青年风暴团。成员构成既有来自于阿里、网易的“老”兵,也有浙大、中科大、杭电等校的应届新人。团队在日常的事务对接之外,还在物料系统、工程渠道、建立渠道、功能体会、云端应用、数据剖析及可视化n ( 2 等方向进行技能探究和实战,推动并落地了一系列的内部E 4 B w ` x T技能产品,继续探究前端技能系统的新边界。

假如你想改动一向被事折腾,期望开始能折腾事;假如你想改动一向被劝诫需求多些主意,却无从破局;假如你想改动你有才能去做成那个成果,却不需求你;假如你想改动你想做成的事需求一个团队去支撑,但没你带人的位置;假如你想改动R ) ! ^ &既定的节奏,将会是“z r 0 q / 5 年作业时刻 3 年作业经验”;假如你想改动本来悟性不错,但总% ! .是有那一层窗户纸的含糊… 假如你信任信任的力量,信任平凡人能成就非凡事,信任能遇到更G m [ 1 5好的自己。假如你期望参加到随着事务腾飞的进程,亲手推动一个有着深化的事务了解、完善的技能系统、技能发明价值、影响力外溢的M z l b J 0 0前端团队的生长进程,我觉得咱们该聊聊。任? Z 7 d ^ y J何时刻,等着你写点什么,发给r ) / F V + q ZooTea5 6 M X Em@cai-inc.com

一份值得收藏的 Git 异常处理清单