你可能不知道的20個Git命令,但真的很實用

如果您曾經瀏覽過git 手冊(或 run man git),那麼您會注意到 git 的功能比我們大多數人每天使用的要多得多。很多這些命令都非常強大,可以讓你的生活更輕鬆(其他命令有點小衆,但仍然很高興知道)。

 

這篇文章概述了我最喜歡的 20 個未充分使用的 git 功能,您可以使用它們來提升您的開發過程,給您的同事留下深刻印象,幫助您回答 git 面試問題,最重要的是 - 玩得開心!

主要包含以下的命令

  • Git Web -打開內置 GUI
  • Git註釋 -將額外信息附加到提交
  • Git Bisect -像專業人士一樣調試
  • Git Grep -搜索任何東西
  • Git Archive -壓縮項目以供共享
  • Git 子模塊-將其他存儲庫導入您的
  • Git錯誤報告-使用系統信息編譯錯誤報告
  • Git Fsck -驗證和恢復無法訪問的對象
  • Git Stripspace -刪除尾隨空格
  • Git Diff -比較兩個文件之間的變化
  • Git Hooks -在運行 git 命令時執行腳本
  • Git Blame -顯示給定行的作者
  • Git Large File Storage -在 git 中存儲大文件
  • Git Garbage Collection -優化你的 git repo
  • Git Show -輕鬆檢查任何 git 對象
  • Git Describe -根據最後一個標籤給出可讀的名稱
  • Git Tag -在特定點創建版本標籤
  • Git Reflog -列出在回購上所做的所有 git 操作
  • Git Log -查看提交日誌和分支圖
  • Git Cherry Pick-將功能拉入您的分支
  • Git Switch -在分支之間快速跳轉
  • 獎勵-使用更多命令擴展 git!

接下來詳細聊聊這些命令

1、網頁版

運行git instaweb以立即瀏覽 gitweb中的工作存儲庫

Git 有一個內置的基於 Web 的可視化工具,用於瀏覽本地存儲庫,它允許您通過瀏覽器中的 GUI 查看和管理您的存儲庫。它包含許多有用的功能,包括:

  • 瀏覽和單步執行修訂並檢查差異、文件內容和元數據
  • 可視化查看提交日誌、分支、目錄、文件歷史和附加數據
  • 生成提交和存儲庫活動日誌的 RSS或 Atom 提要
  • 搜索提交、文件、更改和差異

要打開它,只需git instaweb從您的存儲庫中運行即可。您的瀏覽器應該會彈出並加載http://localhost:1234. 如果你沒有安裝 Lighttpd,你可以用-dflag 指定一個替代的 web 服務器。其他選項可以通過標誌(如-p端口、-b瀏覽器打開等)或在[instaweb]git 配置中的塊下配置。

還有一個git gui命令,可以打開一個基於GUI 的 git應用程序

 

2、Git 筆記

用於git notes向提交添加額外信息

有時您需要將其他數據附加到 git 提交(除了更改、消息、日期時間和作者信息之外)。

註釋存儲在 中.git/refs/notes,並且由於它與提交對象數據分開,您可以隨時修改與提交關聯的註釋,而無需更改 SHA-1 哈希。

git log您可以使用大多數 git GUI 應用程序或git notes show命令查看註釋。一些 git 主機還在提交視圖中顯示註釋(儘管GH 不再顯示註釋)。

3、Git 一分爲二

您可以使用git bisect二進制搜索找到引入錯誤的提交

這是最強大但易於使用的 git 命令之一 - bisect 在調試時絕對是救命稻草。在開始對分後,它會爲您檢查提交,然後您告訴它提交是good(沒有錯誤)或bad(引入錯誤),這可以讓您縮小出現錯誤的最早提交的範圍。

要開始,運行git bisect start然後傳遞給它一個已知的好提交git bisect good <commit-hash>和一個已知的壞提交(默認爲當前)git bisect bad <optional-hash>。然後它將檢查好提交和壞提交之間的提交,然後您指定 bug 存在的天氣與git bisect good或git bisect bad。然後它會重複這個過程,在好與壞的中心檢查一個提交,一直到你找到引入錯誤的確切提交。隨時取消git bisect reset。

bisect 命令還有更多功能,包括回放、查看提交、跳過,因此下次調試時值得查看文檔。

3、Git Grep

用於git grep在您的存儲庫中搜索代碼、文件、提交或任何其他內容

有沒有發現自己需要在 git項目中的任何地方搜索字符串?Ctrl使用 git grep,您可以輕鬆地在整個項目中和跨分支(例如更強大的+ F!)搜索任何字符串或RegEx。

git grep <regexp> <ref>

它包含大量選項來縮小搜索範圍或指定結果格式。例如,用於-l僅返回文件名、-c指定要返回的每個文件的匹配數、-e排除匹配條件的結果、--and指定多個條件、-n使用行號進行搜索。

由於 git grep與正則表達式兼容,因此您可以使用搜索的字符串獲得更多高級信息。您還可以使用它來指定文件擴展名,例如git grep 'console.log' *.js它將顯示 JavaScript文件中的所有console.logs

第二個參數是一個 ref,可以是分支名稱、提交、提交範圍或其他任何內容。例如git grep "foo" HEAD~1將搜索以前的提交。


4、Git 存檔

用於git archive將整個存儲庫合併到一個文件中

共享或備份存儲庫時,通常首選將其存儲爲單個文件。使用 git archive 將包括所有 repo 歷史記錄,因此可以輕鬆將其提取回其原始形式。該命令還包括許多附加選項,因此您可以準確自定義存檔中包含和不包含的文件。

git archive --format=tar --output=./my-archive HEAD

5、Git 子模塊

用於git submodule將任何其他存儲庫拉入您的存儲庫

在 git 中,子模塊讓您可以將一個存儲庫掛載到另一個存儲庫中,通常用於核心依賴項或將組件拆分到單獨的存儲庫中。有關詳細信息,請參閱這篇文章。

運行以下命令會將模塊拉入指定位置,並創建一個.gitmodules文件,以便在克隆 repo 時始終下載該文件。克隆 repo 時使用--recursive標誌來包含子模塊。

git submodule add https://github.com/<user>/<repo> <path/to/save/at>

還有git subtree,它做類似的事情,但不需要元數據文件。

6、Git 錯誤報告

用於git bugreport編寫錯誤票,包括 git 和系統信息

此命令將捕獲系統信息,然後打開一個標準錯誤模板(重現步驟、實際 + 預期輸出等)。完成的文件應該是一個非常完整的錯誤報告,包含所有必要的信息。

如果您是開源包的維護者並要求用戶(開發人員)提出錯誤報告,這將非常方便,因爲它確保包含所有必要的數據。

如果你向核心 git 系統提出錯誤報告,你也可以運行git diagnose命令,然後在這裏提出你的問題。

7、git fsck

用於git fsck檢查所有對象,或恢復無法訪問的對象

雖然不經常需要,但有時您可能必須驗證 git 存儲的對象。這就是 fsck(或文件系統檢查)發揮作用的地方,它測試對象數據庫並驗證所有對象的 SHA-1 ID 及其建立的連接。

它還可以與--unreachable標誌一起使用,以查找不再可以從任何命名引用訪問的對象(因爲與其他命令不同,它包括 中的所有內容.git/objects)。

8、Git 條帶空間

用於git stripspace格式化給定文件中的空格

最佳做法是避免在行尾尾隨空格,避免有多個連續的空行,避免輸入的開頭和結尾出現空行,並以新行結束每個文件。有很多特定於語言的工具可以自動爲您執行此操作(例如 prettier),但 Git 也內置了此功能。

它用於元數據(提交消息、標籤、分支描述等),但如果您將文件通過管道傳輸給它,然後將響應通過管道傳輸迴文件,它也可以工作。例如cat ./path-to-file.txt | git stripspace或git stripspace < dirty-file.txt > clean-file.txt

您還可以使用它來刪除註釋(使用--strip-comments),甚至註釋掉行(使用--comment-lines)。

9、Git 差異

你git diff可以比較2組代碼之間的區別

您可能知道您可以運行git diff以顯示自上次提交以來的所有更改,或者用於git diff <commit-sha>比較 2 次提交或 1 次提交到 HEAD。但是您可以使用 diff 命令做更多的事情。

您還可以使用它來比較任意兩個任意文件,diff file-1.txt file-2.txt(不再訪問diffchecker.com!)

或者比較 2 個分支,或者相互引用,使用git diff branch1..branch2

請注意,雙點 ( ..) 與空格相同,表示差異輸入應該是分支的尖端,但您也可以使用三點 ( ...) 將第一個參數轉換爲共享共同祖先提交的引用在兩個差異輸入之間 - 非常有用!如果只想跨分支比較單個文件,只需將文件名作爲第三個參數傳遞。

您可能希望查看在給定日期範圍內所做的所有更改,對於此用途git diff HEAD@{7.day.ago} HEAD@{0}(上週),同樣可以將其與文件名、分支名稱、特定提交或任何其他參考配對。

還有一個git range-diff命令,它提供了一個用於比較提交範圍的簡單界面。

git diff 工具還有更多功能(以及使用您自己的差異檢查器的選項),因此我建議您查看 文檔。

10、Git 鉤子

用於hooks在發生給定的獲取操作時執行命令或運行腳本

Hooks 可以讓你自動化幾乎所有的事情。例如:確保滿足標準(提交消息、分支名稱、補丁大小)、代碼質量(測試、lint)、將附加信息附加到提交(用戶、設備、票證 ID)、調用 webhook 來記錄事件或運行管道等

大多數 git 事件都有前置和後置鉤子,比如提交、變基、合併、推送、更新、應用補丁等。

鉤子存儲在.git/hooks(除非你在別處配置它們git config core.hooksPath),並且可以使用git hook命令進行測試。由於它們只是 shell 文件,因此可用於運行任何命令。

鉤子不會被推送到遠程存儲庫,因此要在您的團隊中共享和管理它們,您需要使用鉤子管理器,例如lefthook或husky。還有幾個3rd-party 工具,可以讓管理鉤子更容易,我推薦overcommit。

請記住,掛鉤總是可以跳過(使用--no-verify標誌),所以永遠不要純粹依賴掛鉤,尤其是對於任何與安全相關的事情。

11、Git 責備

用於git blame顯示特定修訂和行的作者信息

一個經典的,快速找出誰寫了特定代碼行(也就是你的哪個同事應該爲這個錯誤負責!)。但它也有助於確定在哪個時間點發生了某些更改並檢查該提交和關聯的元數據。

例如,要查看 index.rs 第 400 到 420 行的作者和提交信息,您可以運行:

git blame -L 400,420 index.rs

12、Git 語言文件系統

存儲大文件git lfs,以免拖累您的存儲庫

您的項目通常會包含較大的文件(例如數據庫、二進制資產、檔案或媒體文件),這會減慢 git 工作流程並使使用限制達到最大。這就是大型文件存儲的用武之地——它使您能夠將這些大型資產存儲在其他地方,同時使它們可以通過 git 進行跟蹤並保持相同的訪問控制/權限。LFS 的工作原理是將這些較大的文件替換爲在 git 中跟蹤的文本指針。

要使用它,只需運行git lfs track <file glob>,這將更新您的.gitattributes文件。您可以通過擴展名(例如*.psd)、目錄或單獨指定文件。運行git lfs ls-files以查看跟蹤的 LFS 文件列表。

13、垃圾收集器

用於git gc優化您的存儲庫

隨着時間的推移,git repos 會積累各種類型的垃圾,這些垃圾會佔用磁盤空間並減慢操作速度。這就是內置垃圾收集器的用武之地。運行git gc將刪除孤立的和不可訪問的提交(使用git prune),壓縮文件修訂和存儲的 git 對象,以及一些其他一般的內務處理任務,如打包引用、修剪引用日誌、尊重元數據或陳舊工作樹和更新索引。

添加--aggressive標誌將積極優化存儲庫,丟棄任何現有的增量並重新計算它們,這需要更長的時間才能運行,但如果您有一個大型存儲庫,則可能需要。

14、Git 顯示

用於git show輕鬆檢查任何 git 對象

以易於閱讀的形式輸出對象(blob、樹、標籤或提交)。要使用,只需運行git show <object>. 您可能還想附加--pretty標誌,以獲得更清晰的輸出,但還有許多其他選項可用於自定義輸出(使用--format),因此此命令非常強大,可以準確顯示您需要的內容。

這非常有用的一個實例是在另一個分支中預覽文件,而無需切換分支。趕緊跑git show branch:file

15、Git 描述

用於git describe查找可從提交中訪問的最新標記,併爲其指定一個人類可讀的名稱

運行git describe,您將看到一個人類可讀的字符串,該字符串由最後一個標記名稱與當前提交組合而成,以生成一個字符串。您還可以將特定標籤傳遞給它,

請注意,除非您附加--all標誌,否則您必須已創建標籤才能正常工作。默認情況下,Git describe 也只會使用帶註釋的標籤,因此您必須指定--tags標誌以使其也使用輕量級標籤。

16、Git 標籤

使用標記回購歷史中的特定點git tag

能夠標記存儲庫歷史記錄中最常用於表示發佈版本的特定重要點通常很有用。創建標籤就像 一樣簡單git tag <tagname>,或者您可以使用 標記歷史提交git tag -a v4.2.0 <commit sha>。與提交一樣,您可以在標籤旁邊包含一條消息,使用-m.

不要忘記將您的標籤推送到遠程,使用git push origin <tagname>.要列出所有標籤,只需運行git tag,並可選擇-l用於通配符搜索。然後你就可以檢查一個特定的標籤,git checkout <tagname>

17、Git 刷新日誌

使用列出對您的回購所做的所有更新git reflog

Git 使用稱爲參考日誌或“reflogs”的機制跟蹤分支尖端的更新。跟蹤各種事件,包括:克隆、拉取、推送、提交、檢出和合並。能夠找到事件引用通常很有用,因爲許多命令都接受引用作爲參數。只需運行git reflog即可查看 上最近發生的事件HEAD。

reflog 真正有用的一件事是恢復丟失的提交。Git 永遠不會真正丟失任何東西,即使是在重寫歷史時(比如變基或提交修改)。Reflog 允許您返回提交,即使它們沒有被任何分支或標記引用。

默認情況下 reflog 使用HEAD(您當前的分支),但您可以在任何 ref 上運行 reflog。例如git reflog show <branch name>,或查看隱藏的更改git reflog stash。或顯示所有參考資料git reflog show --all

18、Git 日誌

用於git log查看提交列表

您可能已經熟悉運行git log以查看當前分支上最近提交的列表。但是您可以使用 git log 做更多的事情。

使用git log --graph --decorate --oneline將顯示一個漂亮整潔的提交圖以及 ref 指針。

 

您還經常需要能夠根據各種參數過濾日誌,其中最有用的是:

  • git log --search="<anything>"- 搜索特定代碼更改的日誌
  • git log --author="<pattern>"- 僅顯示特定作者的日誌
  • git log --grep="<pattern>"- 使用搜索詞或正則表達式過濾日誌
  • git log <since>..<until>- 顯示兩個引用之間的所有提交
  • git log -- <file>- 顯示僅對特定文件進行的所有提交

或者,只運行git shortlog彙總的提交列表。

19、Git 櫻桃採摘

用於git cherry-pick通過引用選擇指定的提交併將它們附加到工作 HEAD

有時你需要從其他地方拉一個特定的提交到你當前的分支。這對於應用熱修復、撤消更改、恢復丟失的提交以及在某些團隊協作設置中非常有用。請注意,通常傳統的合併是更好的做法,因爲挑選提交會導致日誌中出現重複提交。

用法很簡單,只需運行git cherry-pick <commit-hash>. 這會將指定的提交拉入當前分支。

20、Git 開關

利用git switch

在分支之間移動是我們經常做的事情,該switch命令就像是簡化版的git checkout,它可以用於創建和在分支之間導航,但不像 checkout 在您在分支之間移動時不會複製修改的文件。

與 類似checkout -b,使用 switch 命令,您可以附加-c標誌以創建一個新分支,然後直接跳入其中,例如git switch -c <new branch>. 運行git switch -將放棄您所做的任何實驗性更改,並返回到您之前的分支。

21、Git 站會

用於git standup根據 git commits 回憶你在上一個工作日做了什麼

我把這個放在最後,因爲它不包含在大多數 git 客戶端中,但是您可以使用系統包管理器、使用 1 行 curl 腳本或通過從源代碼構建來輕鬆安裝它。

如果您的老闆要求您每天站立一次,以更新昨天的工作,但您永遠記不起自己到底做了什麼——這個適合您!它將顯示一個格式良好的列表,列出在給定時間範圍內完成的所有事情。用法很簡單,只需運行git standup,或使用這些選項指定應顯示哪些數據(作者、時間範圍、分支等)。

22、獎金

Git 可以通過附加組件輕鬆擴展,以添加執行有用任務的額外命令。最完整的擴展之一是@tj的git-extras。它爲您提供了 70 多個額外的命令來自動執行常見的 git 作業。

有關更有用的 git 附加組件的列表,請參閱
stevemao/awesome-git-addons。

如果您正在使用 GitHub 存儲庫,那麼GitHub CLI讓您可以從命令行執行常見任務(管理 PR、問題、代碼審查等)。

如果你正在學習前端,Git是一定要開始學習的,我們在講完html標籤屬性之後就開始給大家講解了git和markdown使用!上次和大家分享Git命令很多同學表示看不懂,不能理解!的確纔開始學習Git不適合用這樣複雜的方法,可以通過先通過鼠標操作的方式學習,很榮幸我們的30天課程設計在教大家入門Git的時候就是鼠標操作的,如果需要相關教程,可以私聊我!

 

爲幫助到一部分同學不走彎路,真正達到一線互聯網大廠前端項目研發要求,首次實力寵粉,打造了《30天挑戰學習計劃》,內容如下:

HTML/HTML5,CSS/CSS3,JavaScript,真實企業項目開發,雲服務器部署上線,從入門到精通

  • PC端項目開發(1個)
  • 移動WebApp開發(2個)
  • 多端響應式開發(1個)

共4大完整的項目開發 !一行一行代碼帶領實踐開發,實際企業開發怎麼做我們就是怎麼做。從學習一開始就進入工作狀態,省得浪費時間。

從學習一開始就同步使用 Git 進行項目代碼的版本的管理,Markdown 記錄學習筆記,包括真實大廠項目的開發標準和設計規範,命名規範,項目代碼規範,SEO優化規範

從藍湖UI設計稿 到 PC端,移動端,多端響應式開發項目開發

  • 真機調試,雲服務部署上線;
  • Linux環境下 的 Nginx 部署,Nginx 性能優化;
  • Gzip 壓縮,HTTPS 加密協議,域名服務器備案,解析;
  • 企業項目域名跳轉的終極解決方案,多網站、多系統部署;
  • 使用 使用 Git 在線項目部署;

這些內容在《30天挑戰學習計劃》中每一個細節都有講到,包含視頻+圖文教程+項目資料素材等。只爲實力寵粉,真正一次掌握企業項目開發必備技能,不走彎路 !

過程中【不涉及】任何費用和利益,非誠勿擾 。

如果你沒有添加助理老師微信,可以添加下方微信,說明要參加30天挑戰學習計劃,來自博客園!老師會邀請你進入學習,並給你發放相關資料。

30 天挑戰學習計劃 Web 前端從入門到實戰 | arry老師的博客-艾編程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章