2021-05-12 14:32:11
你要用到的 Git 常用命令
像大多數新手一樣,我一開始是在 StackOverflow 上搜尋 Git 命令,然後把答案複製貼上,並沒有真正理解它們究竟做了什麼。
Image credit: XKCD
我曾經想過:“如果有一個最常見的 Git 命令的列表,以及它們的功能是什麼,這不是極好的嗎?”
多年之後,我編製了這樣一個列表,並且給出了一些最佳實踐,讓新手們甚至中高階開發人員都能從中發現有用的東西。
為了保持實用性,我將這個列表與我過去一週實際使用的 Git 命令進行了比較。
幾乎每個開發人員都在使用 Git,當然很可能是 GitHub。但大多數開發者大概有 99% 的時間只是使用這三個命令:
git add --all
git commit -am "<message>"
git push origin master
如果你只是單槍匹馬,或者參加一場駭客馬拉松或開發一次性的應用時,它工作得很好,但是當穩定性和可維護性開始成為一個優先考慮的事情後,清理提交、堅持分支策略和提交資訊的規範性就變得很重要。
我將從常用命令的列表開始,使新手更容易了解 Git 能做什麼,然後進入更高階的功能和最佳實踐。
經常使用的命令
要想在倉庫(repo)中初始化 Git,你只需輸入以下命令即可。如果你沒有初始化 Git,則不能在該倉庫內執行任何其他的 Git 命令。
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
相同。
git remote -v
git remote add origin <url>
git remote set-url origin <url>
複製倉庫最常見的方式是使用 git clone
,後跟倉庫的 URL。
請記住,遠端倉庫將連線到克隆倉庫原屬於的帳戶。所以,如果你克隆了一個屬於別人的倉庫,你將無法推播到 GitHub,除非你使用上面的命令改變了 origin
。
gitclone<url>
你很快就會發現自己正在使用分支。如果你還不理解什麼是分支,有許多其他更深入的教學,你應該先閱讀它們,再繼續下面的操作。(這裡是一個教學)
命令 git branch
列出了本地機器上的所有分支。如果要建立一個新的分支,可以使用命令 git branch <name>
,其中 <name>
表示分支的名字,比如說 master
。
git checkout <name>
命令可以切換到現有的分支。你也可以使用 git checkout -b
命令建立一個新的分支並立即切換到它。大多數人都使用此命令而不是單獨的 branch
和 checkout
命令。
git branch
git branch <name>
git checkout <name>
git checkout -b <name>
如果你對一個分支進行了一系列的更改,假如說此分支名為 develop
,如果想要將該分支合併回主分支(master
)上,則使用 git merge <branch>
命令。你需要先檢出(checkout
)主分支,然後執行 git merge develop
將 develop
合併到主分支中。
git merge <branch>
如果你正在與多個人進行共同作業,你會發現有時 GitHub 的倉庫上已經更新了,但你的本地卻沒有做相應的更改。如果是這樣,你可以使用 git pull origin <branch>
命令從遠端分支中拉取最新的更改。
git pull origin <branch>
如果您好奇地想看到哪些檔案已被更改以及哪些記憶體正在被跟蹤,可以使用 git status
命令。如果要檢視每個檔案的更改,可以使用 git diff
來檢視每個檔案中更改的行。
git status
gitdiff--stat
高階命令和最佳實踐
很快你會到達一個階段,這時你希望你的提交看起來整潔一致。你可能還需要調整你的提交記錄,使得提交更容易理解或者能還原一個意外的有破壞性的更改。
git log
命令可以輸出提交的歷史記錄。你將使用它來檢視提交的歷史記錄。
你的提交會附帶訊息和一個雜湊值,雜湊值是一串包含數位和字母的隨機序列。一個雜湊值範例如下:c3d882aa1aa4e3d5f18b3890132670fbeac912f7
。
git log
假設你推播了一些可能破壞了你應用程式的東西。你最好回退一個提交然後再提交一次正確的,而不是修復它和推播新的東西。
如果你希望及時回退並從之前的提交中檢出(checkout
)你的應用程式,則可以使用該雜湊作為分支名直接執行此操作。這將使你的應用程式與當前版本分離(因為你正在編輯歷史記錄的版本,而不是當前版本)。
git checkout c3d88eaa1aa4e4d5f
然後,如果你在那個歷史分支中做了更改,並且想要再次推播,你必須使用強制推播。
注意:強制推播是危險的,只有在絕對必要的時候才能執行它。它將覆蓋你的應用程式的歷史記錄,你將失去之後版本的任何資訊。
git push -f origin master
在其他時候,將所有內容保留在一個提交中是不現實的。也行你想在嘗試有潛在風險的操作之前儲存當前進度,或者也許你犯了一個錯誤,但希望在你的版本歷史中避免尷尬地留著這個錯誤。對此,我們有 git rebase
。
假設你在本地歷史記錄上有 4 個提交(沒有推播到 GitHub),你要回退這是個提交。你的提交記錄看起來很亂很拖拉。這時你可以使用 rebase
將所有這些提交合併到一個簡單的提交中。
git rebase -i HEAD~4
上面的命令會開啟你計算機的預設編輯器(預設為 Vim,除非你將預設修改為其他的),提供了幾個你準備如何修改你的提交的選項。它看起來就像下面的程式碼:
pick 130deo9 oldest commit message
pick 4209fei second oldest commit message
pick 4390gne third oldest commit message
pick bmo0dne newest commit message
為了合併這些提交,我們需要將 pick
選項修改為 fixup
(如程式碼下面的文件所示),以將該提交合併並丟棄該提交??息。請注意,在 Vim 中,你需要按下 a
或 i
才能編輯文字,要儲存退出,你需要按下 Esc
鍵,然後按 shift + z + z
。不要問我為什麼,它就是這樣。
pick 130deo9 oldest commit message
fixup 4209fei second oldest commit message
fixup 4390gne third oldest commit message
fixup bmo0dne newest commit message
這將把你的所有提交合併到一個提交中,提交訊息為 oldest commit message
。
下一步是重新命名你的提交訊息。這完全是一個建議的操作,但只要你一直遵循一致的模式,都可以做得很好。這裡我建議使用 Google 為 Angular.js 提供的提交指南。
為了更改提交訊息,請使用 amend
標誌。
git commit --amend
這也會開啟 Vim,文字編輯和儲存規則如上所示。為了給出一個良好的提交訊息的例子,下面是遵循該指南中規則的提交訊息:
feat: add stripe checkout button to payments page
- add stripe checkout button
-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
相關文章