手把手教你用Git——Git常用技巧分享
theme: nico
開啟掘金成長之旅!這是我參與「掘金日新計劃 · 2 月更文挑戰」的第 28 天,點選檢視活動詳情
前言
背景
由於本社新人並不常用Git,再加上國內的網路並不算好,在這樣一個背景下,為了簡化Git的使用,我在這裡簡單記錄了一個關於 Git的教程,希望對大家有所幫助。
關於本教程的編寫環境
本文基於Windows10系統,Mac系統的小夥伴可以嘗試Homebrew。由於本人手裡並沒有搭載MacOS的電腦,因此Homebrew相關的使用請自行嘗試。
對於使用 Windows11系統 的小夥伴,本文的教程是通用的,不過一些細節可能略有不同,這點希望小夥伴們注意一下
關於Git
Git 是一個開源的分散式版本控制系統,可以有效、快速的進行專案版本管理。Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。 ——來自 Git 簡介 | 程式設計師大彬 (topjavaer.cn)
簡單來說,Git 就是一個專案程式碼管理軟體
關於本教程的評論
這個教程基於我的個人實踐,很多東西基於我個人的理解,所以有望大家多多指教。如果你發現了這個教程的錯誤之處,歡迎你通過郵箱或者QQ聯絡我,我會及時的進行改進。如果教程中有表述不清楚的地方,也請指出,或提供建議。
關於本教程的轉載
任何個人或組織可以轉載我的這個教程系列,甚至可以對其進行一些修改。但前提是要保證實時更新,並且保留本教程的版權資訊,謝謝支援,我也會不定時的更新這個系列的教程。
正文
安裝與使用
具體安裝教程可以看看這個系列的第一期:手把手教你用Git——Git使用教程(一) - 掘金 (juejin.cn)
常用技巧
條件包含 (Include-if)
條件包含 (Include-if) 是一種文字處理語法,它允許在文件中根據條件包含或排除某些文字。在編寫具有多個變體或選項的文件時,這種語法特別有用。
語法格式為:
{{#condition}}
text to include if the condition is true
{{/condition}}
或
{{#condition}}
text to include if the condition is true
{{else}}
text to include if the condition is false
{{/condition}}
其中,condition
可以是任何在文件處理器中可用的條件語句,例如變數、函式或比較操作符等。如果 condition
為真,那麼位於 {{#condition}}
和 {{/condition}}
之間的文字將包含在輸出中;否則,如果存在 {{else}}
部分,則位於 {{else}}
和 {{/condition}}
之間的文字將被包含在輸出中。
例如,當在多個 Git 倉庫中工作時,您可能希望為每個倉庫提供不同的預設設定,例如預設的使用者名稱、電子郵件地址、預設分支等。這樣做可以避免在提交程式碼時不小心使用錯誤的身份或預設分支等問題。
-
開啟您的 Git 配置檔案(
~/.gitconfig
),並在其中新增以下內容:[includeIf "gitdir:/path/to/repo1/.git/"] path = ~/.gitconfig-repo1 [includeIf "gitdir:/path/to/repo2/.git/"] path = ~/.gitconfig-repo2
這將使 Git 檢查您的 Git 倉庫目錄,併為每個倉庫使用不同的配置檔案。在上面的示例中,如果 Git 倉庫的目錄是/path/to/repo1/.git/
,則將載入~/.gitconfig-repo1
檔案中的配置;如果 Git 倉庫的目錄是/path/to/repo2/.git/
,則將載入~/.gitconfig-repo2
檔案中的配置。 -
在每個配置檔案中設定適當的預設設定,例如:
[user] name = John Doe email = [email protected] [init] defaultBranch = main
在上面的例子中,我們設定了預設的使用者名稱和電子郵件地址,並將預設分支設定為 main
。
這樣做後,當您使用 git init
命令在不同的 Git 倉庫中建立新的倉庫時,它們將使用各自的預設設定。同樣,當您提交程式碼時,Git 將自動使用正確的身份和分支。
多工作區
Git支援我們建立多工作區,同一個 Git 倉庫中建立多個不同的工作區,每個工作區可以包含不同的檔案和修改,以便我們可以在不同的任務之間快速切換。例如,我們可以在一個工作區中進行開發,同時在另一個工作區中進行修復缺陷或打補丁。
要建立一個新的工作區,請使用 git worktree
命令,後跟一個新的目錄路徑。例如,要建立名為 new-workspace
的新工作區,請執行以下命令:
git worktree add new-workspace
這將在當前倉庫的根目錄中建立一個名為 new-workspace
的新目錄,並將其連結到 Git 倉庫中的一個分支。您可以在新的工作區中進行修改和提交,而不會影響主工作區或其他工作區。
要切換到不同的工作區,請使用 git worktree list
命令列出所有的工作區。然後,使用 cd
命令進入您要切換到的工作區的目錄。例如,要切換到 new-workspace
工作區,請執行以下命令:
cd new-workspace
您可以在新的工作區中執行 git
命令,例如 git status
、git add
和 git commit
,而不會影響其他工作區或主工作區。
要刪除工作區,請使用 git worktree remove
命令,並指定要刪除的工作區的目錄路徑。例如,要刪除 new-workspace
工作區,請執行以下命令:
git worktree remove new-workspace
這將刪除工作區並斷開連結到 Git 倉庫中的分支。
常用指令
git commit --fixup
和 git commit --squash
是兩個相關的 Git 命令,它們可以讓您更輕鬆地組織您的 Git 提交歷史。這些命令通常與 git rebase
和 --autosquash
選項一起使用,以便您可以對提交歷史進行重新排列和修改。
git commit --fixup
命令可以建立一個 "修正" 提交,該提交僅包含當前更改所需的內容,但將其標記為要在將來與另一個提交合並。例如,如果您要更改某個檔案,但希望在未來將其合併到以前的提交中,可以使用 git commit --fixup
命令建立一個標記該更改的修正提交。修正提交的提交訊息應以 fixup!
開頭,後跟原始提交的提交訊息。
git commit --squash
命令類似於 --fixup
,但是它將當前更改合併到先前的提交中,並在提交訊息中包含原始提交的提交訊息。使用 --squash
選項提交更改時,可以使用 -m
選項為提交訊息指定字首,以便稍後將其與其他提交合並。
當您在 git rebase
命令中使用 --autosquash
選項時,Git 會自動識別標記為 "修正" 或 "合併" 的提交,並將它們放置在要合併到的提交的正確位置。例如,如果您在使用 --autosquash
選項時執行 git rebase -i
命令,並在編輯器中將 pick
命令替換為 squash
或 fixup
命令,Git 將自動將這些提交合併到其他提交中。
總之,使用 git commit --fixup
和 git commit --squash
命令可以更輕鬆地組織您的提交歷史,並使其更易於閱讀和理解。使用 git rebase
和 --autosquash
選項可以進一步簡化提交歷史的修改過程,以便您可以更輕鬆地重新排列和編輯提交
在這裡,我在介紹一些常用的指令:
1. git init:在一個新專案中建立 Git 倉庫。
2. git clone:在本地複製遠端 Git 倉庫中的程式碼,通常用於獲取和開始處理一個專案。
3. git add:將要提交的更改新增到 Git 倉庫的暫存區,通常在進行一些小的更改後使用。
4. git commit:將更改提交到 Git 倉庫,通常在對一組檔案進行一系列更改後使用。
5. git push:將本地 Git 倉庫中的更改推送到遠端 Git 倉庫,通常在完成一組更改後使用。
6. git pull:從遠端 Git 倉庫獲取最新版本的程式碼並將其合併到本地倉庫中,通常在團隊中協作開發時使用。
7. git branch:建立、刪除或檢視本地分支,通常在進行復雜的開發任務或修復錯誤時使用。
8. git merge:將兩個分支合併在一起,通常在完成分支開發或修復錯誤後使用。
9. git status:檢視檔案的狀態,通常用於檢查檔案是否被修改或新增到暫存區。
10. git log:檢視 Git 倉庫的提交歷史記錄,通常用於瞭解專案的開發歷程或查詢特定提交。
11. git diff:比較不同版本之間的差異,通常用於查詢更改或解決合併衝突。
12. git stash:將當前的工作目錄和暫存區的更改暫時儲存,並還原到 Git 倉庫的上一版本,通常用於暫時儲存未完成的工作。
13. git tag:用於建立和管理 Git 倉庫的標籤(版本號),通常用於標記專案的版本。
14. git remote:列出已配置的遠端 Git 倉庫,通常用於管理多個遠端倉庫。
15. git reset:撤銷已提交的更改,並將 Git 倉庫回滾到之前的版本,通常用於撤銷錯誤的提交或還原專案到之前的狀態。