首頁 > 軟體

你要用到的 Git 常用命令

2020-06-16 17:08:14

像大多數新手一樣,我一開始是在 StackOverflow 上搜尋 Git 命令,然後把答案複製貼上,並沒有真正理解它們究竟做了什麼。

Image credit: XKCD

我曾經想過:“如果有一個最常見的 Git 命令的列表,以及它們的功能是什麼,這不是極好的嗎?”

多年之後,我編製了這樣一個列表,並且給出了一些最佳實踐,讓新手們甚至中高階開發人員都能從中發現有用的東西。

為了保持實用性,我將這個列表與我過去一週實際使用的 Git 命令進行了比較。

幾乎每個開發人員都在使用 Git,當然很可能是 GitHub。但大多數開發者大概有 99% 的時間只是使用這三個命令:

  1. git add --all
  2. git commit -am "<message>"
  3. git push origin master

如果你只是單槍匹馬,或者參加一場駭客馬拉松或開發一次性的應用時,它工作得很好,但是當穩定性和可維護性開始成為一個優先考慮的事情後,清理提交、堅持分支策略和提交資訊的規範性就變得很重要。

我將從常用命令的列表開始,使新手更容易了解 Git 能做什麼,然後進入更高階的功能和最佳實踐。

 

經常使用的命令

要想在倉庫(repo)中初始化 Git,你只需輸入以下命令即可。如果你沒有初始化 Git,則不能在該倉庫內執行任何其他的 Git 命令。

  1. gitinit

如果你在使用 GitHub,而且正在將程式碼推播到線上儲存的 GitHub 倉庫中,那麼你正在使用的就是遠端(remote)倉庫。該遠端倉庫的預設名稱(也稱為別名)為 origin。如果你已經從 Github 複製了一個專案,它就有了一個 origin。你可以使用命令 git remote -v 檢視該 origin,該命令將列出遠端倉庫的 URL。

如果你初始化了自己的 Git 倉庫,並希望將其與 GitHub 倉庫相關聯,則必須在 GitHub 上建立一個,複製新倉庫提供的 URL,並使用 git remote add origin <URL> 命令,這裡使用 GitHub 提供的 URL 替換 <URL>。這樣,你就可以新增、提交和推播更改到你的遠端倉庫了。

最後一條命令用在當你需要更改遠端倉庫時。如果你從其他人那裡複製了一個倉庫,並希望將遠端倉庫從原始所有者更改為你自己的 GitHub 帳戶。除了改用 set-url 來更改遠端倉庫外,流程與 git remote add origin 相同。

  1. git remote -v
  2. git remote add origin <url>
  3. git remote set-url origin <url>

複製倉庫最常見的方式是使用 git clone,後跟倉庫的 URL。

請記住,遠端倉庫將連線到克隆倉庫原屬於的帳戶。所以,如果你克隆了一個屬於別人的倉庫,你將無法推播到 GitHub,除非你使用上面的命令改變了 origin

  1. gitclone<url>

你很快就會發現自己正在使用分支。如果你還不理解什麼是分支,有許多其他更深入的教學,你應該先閱讀它們,再繼續下面的操作。(這裡是一個教學

命令 git branch 列出了本地機器上的所有分支。如果要建立一個新的分支,可以使用命令 git branch <name>,其中 <name> 表示分支的名字,比如說 master

git checkout <name> 命令可以切換到現有的分支。你也可以使用 git checkout -b 命令建立一個新的分支並立即切換到它。大多數人都使用此命令而不是單獨的 branchcheckout 命令。

  1. git branch
  2. git branch <name>
  3. git checkout <name>
  4. git checkout -b <name>

如果你對一個分支進行了一系列的更改,假如說此分支名為 develop,如果想要將該分支合併回主分支(master)上,則使用 git merge <branch> 命令。你需要先檢出(checkout)主分支,然後執行 git merge developdevelop 合併到主分支中。

  1. git merge <branch>

如果你正在與多個人進行共同作業,你會發現有時 GitHub 的倉庫上已經更新了,但你的本地卻沒有做相應的更改。如果是這樣,你可以使用 git pull origin <branch> 命令從遠端分支中拉取最新的更改。

  1. git pull origin <branch>

如果您好奇地想看到哪些檔案已被更改以及哪些記憶體正在被跟蹤,可以使用 git status 命令。如果要檢視每個檔案的更改,可以使用 git diff 來檢視每個檔案中更改的行。

  1. git status
  2. gitdiff--stat

 

高階命令和最佳實踐

很快你會到達一個階段,這時你希望你的提交看起來整潔一致。你可能還需要調整你的提交記錄,使得提交更容易理解或者能還原一個意外的有破壞性的更改。

git log 命令可以輸出提交的歷史記錄。你將使用它來檢視提交的歷史記錄。

你的提交會附帶訊息和一個雜湊值,雜湊值是一串包含數位和字母的隨機序列。一個雜湊值範例如下:c3d882aa1aa4e3d5f18b3890132670fbeac912f7

  1. git log

假設你推播了一些可能破壞了你應用程式的東西。你最好回退一個提交然後再提交一次正確的,而不是修復它和推播新的東西。

如果你希望及時回退並從之前的提交中檢出(checkout)你的應用程式,則可以使用該雜湊作為分支名直接執行此操作。這將使你的應用程式與當前版本分離(因為你正在編輯歷史記錄的版本,而不是當前版本)。

  1. git checkout c3d88eaa1aa4e4d5f

然後,如果你在那個歷史分支中做了更改,並且想要再次推播,你必須使用強制推播。

注意:強制推播是危險的,只有在絕對必要的時候才能執行它。它將覆蓋你的應用程式的歷史記錄,你將失去之後版本的任何資訊。

  1. git push -f origin master

在其他時候,將所有內容保留在一個提交中是不現實的。也行你想在嘗試有潛在風險的操作之前儲存當前進度,或者也許你犯了一個錯誤,但希望在你的版本歷史中避免尷尬地留著這個錯誤。對此,我們有 git rebase

假設你在本地歷史記錄上有 4 個提交(沒有推播到 GitHub),你要回退這是個提交。你的提交記錄看起來很亂很拖拉。這時你可以使用 rebase 將所有這些提交合併到一個簡單的提交中。

  1. git rebase -i HEAD~4

上面的命令會開啟你計算機的預設編輯器(預設為 Vim,除非你將預設修改為其他的),提供了幾個你準備如何修改你的提交的選項。它看起來就像下面的程式碼:

  1. pick 130deo9 oldest commit message
  2. pick 4209fei second oldest commit message
  3. pick 4390gne third oldest commit message
  4. pick bmo0dne newest commit message

為了合併這些提交,我們需要將 pick 選項修改為 fixup(如程式碼下面的文件所示),以將該提交合併並丟棄該提交??息。請注意,在 Vim 中,你需要按下 ai 才能編輯文字,要儲存退出,你需要按下 Esc 鍵,然後按 shift + z + z。不要問我為什麼,它就是這樣。

  1. pick 130deo9 oldest commit message
  2. fixup 4209fei second oldest commit message
  3. fixup 4390gne third oldest commit message
  4. fixup bmo0dne newest commit message

這將把你的所有提交合併到一個提交中,提交訊息為 oldest commit message

下一步是重新命名你的提交訊息。這完全是一個建議的操作,但只要你一直遵循一致的模式,都可以做得很好。這裡我建議使用 Google 為 Angular.js 提供的提交指南

為了更改提交訊息,請使用 amend 標誌。

  1. git commit --amend

這也會開啟 Vim,文字編輯和儲存規則如上所示。為了給出一個良好的提交訊息的例子,下面是遵循該指南中規則的提交訊息:

  1. feat: add stripe checkout button to payments page
  2. - add stripe checkout button
  3. -write tests for checkout

保持指南中列出的型別(type)的一個優點是它使編寫更改紀錄檔更加容易。你還可以在頁尾(footer)(再次,在指南中規定的)中包含資訊來參照問題(issue)。

注意:如果你正在共同作業一個專案,並將程式碼推播到了 GitHub,你應該避免重新參照(rebase)並壓縮(squash)你的提交。如果你開始在人們的眼皮子底下更改版本歷史,那麼你可能會遇到難以追蹤的錯誤,從而給每個人都帶來麻煩。

Git 有無數的命令,但這裡介紹的命令可能是您最初幾年程式設計所需要知道的所有。


Sam Corcos 是 Sightline Maps 的首席開發工程師和聯合創始人,Sightline Maps 是最直觀的 3D 列印地形圖的平台,以及用於構建 Phoenix 和 React 的可延伸生產應用程式的中級高階教學網站 LearnPhoenix.io。使用優惠碼:freecodecamp 取得 LearnPhoenix 的20美元。

(題圖:GitHub Octodex

更多 Git 教學系列文章: 

GitHub 使用教學圖文詳解  http://www.linuxidc.com/Linux/2014-09/106230.htm 

Git使用圖文詳細教學  http://www.linuxidc.com/Linux/2016-11/136781.htm

Ubuntu Git安裝與使用 http://www.linuxidc.com/Linux/2016-11/136769.htm

Git 標籤管理詳解 http://www.linuxidc.com/Linux/2014-09/106231.htm 

Git 分支管理詳解 http://www.linuxidc.com/Linux/2014-09/106232.htm 

Git 遠端倉庫詳解 http://www.linuxidc.com/Linux/2014-09/106233.htm 

Git 本地倉庫(Repository)詳解 http://www.linuxidc.com/Linux/2014-09/106234.htm 

Git 伺服器搭建與用戶端安裝  http://www.linuxidc.com/Linux/2014-05/101830.htm 

Git 概述 http://www.linuxidc.com/Linux/2014-05/101829.htm 

分享實用的GitHub 使用教學 http://www.linuxidc.com/Linux/2014-04/100556.htm 

Git從入門到學會 http://www.linuxidc.com/Linux/2016-10/135872.htm

Git基本操作詳解 http://www.linuxidc.com/Linux/2016-10/135691.htm

Git部署與常用基本命令詳解   http://www.linuxidc.com/Linux/2017-06/144961.htm

分散式版本控制系統 Git 詳細教學  http://www.linuxidc.com/Linux/2017-05/143747.htm


IT145.com E-mail:sddin#qq.com