Git 不要只會 pull 和 push,學學這 5 條提高效率的命令(下)

語言: CN / TW / HK

使用git作為程式碼版本管理,早已是現在開發者必備的技能,但是大多數的開發者還是隻會最基本的儲存,拉去,推送,遇到一些commit管理的問題就束手無策,或者用一些不優雅的方式解決。\ 下面分享一些在開發工作中實踐過的實用命令,這些都能夠大大提交工作效率,還能解決不少疑難場景。\ revert\ 描述:\ 給定一個或多個現有提交,恢復相關提交引入的更改,並記錄一些這些更改的新提交,這就要求你的工作樹是乾淨的(沒有來自頭部的修改)。\ 將現有的提交還原,恢復提交的內容,並生成一條還原記錄。\ 應用場景:\ 應用場景:有一天測試突然跟你說,你開發上線的功能有問題,需要馬上撤回,否則會影響到系統使用,這時可能會想到用reset回退,可是你看了看分支上最新的提交還要其它同事的程式碼,用reset會把這部分程式碼也撤回了,由於情況緊急,又想不到好方法,還是人性的使用reset,然後再讓同事把他的程式碼合一遍(同事聽到想打人),於是你的技術形象在同事眼裡一落千丈。\ 命令使用:\ revert普通提交\ 學會revert之後,立馬就可以拯救這種尷尬的情況\ 現在master記錄如下:\ 在這裡插入圖片描述\ 在這裡插入圖片描述

revert掉自己提交的commit.\ 在這裡插入圖片描述

因為revert會生成一條新的提交記錄,這時會讓你編輯提交資訊,編輯完後:wq儲存退出就好了。\ 在這裡插入圖片描述

再來看下最新的log,生成一條revert記錄,雖然自己之前的提交記錄還會保留著,但你修改的程式碼已經被撤回了。\ revert合併提交\ 在git的commit記錄裡,還有一種型別是合併提交,想要revert合併提交,使用上會有些不一樣。\ 在這裡插入圖片描述

現在的master分支裡多了條合併提交。\ 在這裡插入圖片描述

使用剛剛同樣的revert方法,會發現命令列報錯了。\ 為什麼會這樣,在官方文件中有接受:\ 通常無法revert合併,因為您不知道合併的哪一側應被視為主線,此選項指定的父編號(從1開始),並允許revert反轉相對於指定父編號的更改\ 我的理解是因為合併提交是兩條分支的交集節點,而git不知道需要撤銷的哪一條分支,需要新增引數-m指定主線分支,保留主線分支的程式碼,另一條則被撤銷。\ 在這裡插入圖片描述

revert合併提交後,再次合併分支會失效\ 還是上面的場景,在master分支revert合併提交後,然後切到v2.0分支修復好bug,再合併到master分支時,會發現之前被revert的修改內容沒有重新合併進來。\ 因為使用revert後,v2.0分支的commit還是會保留再master分支的記錄中,當你再次合併進去時,git判斷有相同的commitHash,就忽略了相關的commit需改內容。\ 在這裡插入圖片描述

現在master的記錄是這樣的\ 在這裡插入圖片描述

再次使用revert,之前被revert的修改內容就又回來了。\ reflog\ 描述:\ 此命令管理重錄中記錄的資訊\ 如果說reset –soft時後悔藥,那reflog就是強力後悔藥,它記錄了所有的commit操作記錄,便於錯誤操作後找回記錄。\ 應用場景:\ 應用場景:某天你眼花,發現自己在其它人分支提交了程式碼還推到遠端分支,這時因為分支只有你的最新提交,就想著使用reset –hard,結果緊張不小心點錯了commitHash,reset過頭,把同事的commit搞沒了。\ 沒辦法,reset –hard是強制回退的,找不到commitHash,只能讓同事從本地分支再推一次(同事瞬間拳頭就硬了,怎麼又是你),於是,你的技術形象又一落千丈。\ 命令使用:\ 在這裡插入圖片描述

分支記錄如上,想要reset到b\ 在這裡插入圖片描述

誤操作reset過頭,b沒了,最新的只剩下a\ 在這裡插入圖片描述

這時用git reflog檢視歷史記錄,把錯誤提交的那次commitHash記下\ 在這裡插入圖片描述

再次reset回去,就會發現b回來了。\ 設定git短命令\ 對於我這種喜歡橋命令列而不用圖形化工具的愛好者來說,設定短命令可以很好的提高效率,下面介紹兩種設定短命令的方式。\ 方式一:\ 在這裡插入圖片描述

方式二:\ 開啟全域性配置檔案\ 在這裡插入圖片描述

寫入內容\ 在這裡插入圖片描述

使用\ 在這裡插入圖片描述\ 原始碼附件已經打包好上傳到百度雲了,大家自行下載即可~

連結: https://pan.baidu.com/s/14G-bpVthImHD4eosZUNSFA?pwd=yu27\ 提取碼: yu27\ 百度雲連結不穩定,隨時可能會失效,大家抓緊儲存哈。

如果百度雲連結失效了的話,請留言告訴我,我看到後會及時更新~

開源地址

碼雲地址:\ http://github.crmeb.net/u/defu

Github 地址:\ http://github.crmeb.net/u/defu