Git使用中的一些奇技淫巧

如果我不說奇技淫巧,你們估計就不點進來了

Git作為當今最流行的分布式的代碼版本管理系統(tǒng),它的出現(xiàn)改變了軟件開發(fā)流程,大大地提高了開發(fā)流暢度。

使用Git也有一段時間了,一直都只是使用一些最最基本的幾個命令,對于不復(fù)雜的代碼工程來說,我覺得已經(jīng)夠用了。

命令別名

平時不太用GUI,都是在IDEA中直接敲命令進行相關(guān)操作,覺得命令行相對于GUI來說效率還是要高一些,一開始老老實實的敲完整的命令,比如

1、git checkout  dev
2、git status
3、git commit -m '某次提交'

后來才發(fā)現(xiàn),Git有別名這一功能,通過下面幾個命令可以把比較長的命令使用簡短兩個字母代替。

$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.st status

然后就可以愉快的敲 git st 來查看當前狀態(tài)了,除了這種簡單的替換,還可以進行復(fù)雜的替換,比如要顯示一個牛逼的提交記錄,可以把lg替換成很長的一段命令組合,如下:

$ git config --global alias.lg log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

大家可以感受一下,這是原生的git log

下面是git lg,是不是高大上了很多,還有很多組合命令可以去挖掘

如何放棄本地修改

這個功能平時用的還是比較多的,經(jīng)常功能加了之后發(fā)現(xiàn)并沒什么卵用,需要放棄這些修改,不過這也分為好幾種情況。

1、未進行add操作

這種情況,應(yīng)該是最常見的,一般修改不會輕易進行git add <file>操作,這個時候只需要進行簡單的 git co -- . 全部或者 git co -- <file> 恢復(fù)具體的文件。

命令中的--很重要,沒有--,就可能變成 "分支切換" 的命令,但是如果沒寫--,且沒有對應(yīng)的分支,也可以恢復(fù),為了保險,還是老老實實加上。

該命令就是用來放棄那些還未加入緩存區(qū)的修改操作,包括文件內(nèi)容的修改和文件的刪除,但是對于那些新建的文件來說,并不把它刪掉,因為剛新建的文件對于Git來說是未知的,需要手動的刪除。

2、已經(jīng)被add進緩存

好吧,這種情況,我也是經(jīng)常遇到,因為手速太快,執(zhí)行完git add . 之后,發(fā)現(xiàn)一些有問題,怎么辦?

因為這些修改已經(jīng)被放入緩存區(qū)了,git co 操作已經(jīng)無力回天,這個時候,可以使用 git reset HEAD <file> 命令來放棄指定的文件的緩存,如果要放棄所有修改的緩存,可以使用 git reset HEAD .

該命令相當于撤銷 git add 的影響,在執(zhí)行該命令后,本地的修改并不會消失,而是回到add之前的狀態(tài)。

3、add完之后,還commit了

這種情況最糟心,還好沒有push到遠程倉庫,還可以搶救。其實方法也很簡單,可以使用 git reset --hard HEAD^ 來回退到上一次commit的狀態(tài)。

另外使用此命令可以回退到任意版本:git reset --hard commitid
這里的commitId就是使用 git log 顯示的提交歷史中的SHA碼,只需要前面幾位即可。

如何合并分支

通常我們會在一個新建分支進行相關(guān)功能的開發(fā),比如執(zhí)行 git co -br dev 創(chuàng)建一個dev分支進行開發(fā)。

一個功能迭代開發(fā)了一周,測試通過之后,需要合并回mater分支,這個時候master分支可能已經(jīng)合并了一些其他小伙伴的代碼,這個時候的Git可能下面這個情況

下面是SourceTree上的顯示結(jié)構(gòu)

需要把dev分支的代碼合并到master上,可以有兩種方法

git merge dev
git rebase dev

如果是執(zhí)行 git merge dev ,效果如下

merge命令會留下dev分支,卻在合并的地方多了一個merge節(jié)點。

如果是執(zhí)行git rebase dev-0,會發(fā)生什么?我們再試試

因為測試,重新創(chuàng)建了dev-0分支,通過rebase的合并,發(fā)現(xiàn)dev-0的commit信息很自然被整合到了mater分支中,好像dev-0分支從來沒有存在過一樣,整個分支也很干凈。

刪除遠程分支

有時候可能一不小心,把本地的開發(fā)分支會push到了遠程倉庫,雖然沒什么大礙,對應(yīng)有分支潔癖的同學(xué)可能不能接受,怎么辦,刪除之。

對于本地分支,可以痛快的執(zhí)行 git br -d dev 命令進行刪除,遠程分支就沒這個簡單了,不過命令還是有的,只是不太好記。

git push origin :<branch-name>

推送一個空分支到遠程分支,相當于刪除了遠程分支,在v1.7.0 之后,可以使用下面這種語法進行刪除

// 1.7.0之后
git push origin --delete <branch-name >

tag相關(guān)

一般在發(fā)布一個版本的時候,會打一個對應(yīng)的版本號。

git tag 1.1.8

那么,tag有什么好處?

比如,目前組件已經(jīng)迭代到了版本2.0.5,業(yè)務(wù)卻拿著1.1.8的版本,咨詢哪哪哪有問題,這個時候就可以快速的執(zhí)行 git co 1.1.8 命令定位到1.1.8版本發(fā)布時的代碼,并進行相關(guān)問題的查看。

其它的一些技巧

1、git add -p
之前在執(zhí)行git add時,可能把并不想提交的一些文件(測試文件)給add到緩存了,如果添加了 -p ,可以一個一個提示你進行add,并提示變更的內(nèi)容,簡直無比的貼心。

其它一些高級技能,平時也沒怎么用過,如果有其它的一些技巧,歡迎推薦。

最后

獻上一張圖,已經(jīng)忘記當時是哪里找到的

更多精彩問題,歡迎加入知識星球
450+小伙伴正在討論

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內(nèi)容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,681評論 4 54
  • 聲明:這篇文章來源于廖雪峰老師的官方網(wǎng)站,我僅僅是作為學(xué)習(xí)之用 Git簡介 Git是什么? Git是目前世界上最先...
    橫渡閱讀 3,972評論 3 27
  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 15,922評論 5 147
  • Git常用語法 [TOC] Git簡介 描述 ? Git(讀音為/g?t/。)是一個開源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,559評論 0 13
  • 之前我們分析過微信的地下引流方式。(關(guān)注清大創(chuàng)融)微博等社交應(yīng)用和微信有幾乎類似的趨勢。微博等社交應(yīng)用從 2010...
    清大創(chuàng)融閱讀 1,093評論 0 2