希望本貼能從零開始帶您一起學習如何使用 Git 進行版本控制,并結合遠程倉庫 GitHub。這會是一個循序漸進的指南,我們開始吧!
學習 Git 和 GitHub 的路線圖:
- 理解核心概念:什么是版本控制?Git 是什么?GitHub 是什么?
- 安裝 Git
- 配置 Git
- 本地倉庫操作:創建倉庫、暫存、提交、查看歷史、分支、合并
- GitHub 遠程倉庫操作:注冊 GitHub、創建遠程倉庫、連接本地與遠程、推送、克隆、拉取
- 基本協作流程 (簡介):Fork、Pull Request
- 好習慣和下一步
- 視頻教程 (可視化git很推薦):Git + GitHub 10分鐘完全入門
- 安裝教程 (非常推薦):Git 詳細安裝教程(詳解 Git 安裝過程每一步)
第一部分:理解核心概念
-
什么是版本控制 (Version Control System, VCS)?
- 想象一下你在寫一篇重要的文檔或代碼。你可能會保存多個版本,比如
report_v1.doc
,report_v2.doc
,report_final.doc
,report_final_really_final.doc
。 - 版本控制系統就是一個能幫你自動追蹤文件修改歷史的工具。它記錄了誰、在什么時候、對什么文件做了什么修改。
- 好處:
- 歷史追溯:可以查看任何歷史版本。
- 錯誤恢復:如果不小心改錯了,可以輕松回滾到之前的某個版本。
- 團隊協作:多人可以同時在同一個項目上工作,而不會互相覆蓋對方的修改。
- 分支開發:可以創建“分支”來嘗試新功能或修復 bug,而不影響主線開發。
- 想象一下你在寫一篇重要的文檔或代碼。你可能會保存多個版本,比如
-
Git 是什么?
- Git 是目前世界上最先進、最流行的分布式版本控制系統。
- 分布式意味著每個開發者都擁有項目完整的歷史副本,不像集中式版本控制系統那樣需要時刻連接中央服務器。這使得離線工作和更快的操作成為可能。
- 它由 Linux 的創始人 Linus Torvalds 開發,最初是為了管理 Linux 內核的開發。
-
GitHub 是什么?
- GitHub 是一個基于網頁的 Git 版本庫托管服務。
- 它為你的 Git 倉庫提供了一個遠程存儲空間,并提供了許多協作功能,如問題跟蹤、代碼審查 (Pull Requests)、項目管理等。
- 簡單來說:Git 是工具,GitHub 是平臺 (或服務)。你可以只在本地使用 Git,但結合 GitHub 可以更好地備份、分享和協作。
- 類似的平臺還有 GitLab, Bitbucket 等。
第二部分:安裝 Git
- Windows:
- 訪問 https://git-scm.com/download/win 下載 Git for Windows。
- 具體可參考這篇全網最佳的Git安裝教程 (非常推薦):
Git 詳細安裝教程(詳解 Git 安裝過程每一步)
* 運行安裝程序,大部分選項保持默認即可。建議勾選 “run with bash” (在右鍵菜單中添加 Git Bash 選項) 和 “Add Git Bash for Windows Terminal” (如果你想在 終端 (Terminal) 或 命令提示符 (Command Prompt) 中使用)。
- macOS:
- 最簡單的方式是安裝 Xcode Command Line Tools。打開終端 (Terminal),輸入
git --version
。如果沒安裝,系統會提示你安裝。 - 或者通過 Homebrew 安裝:
brew install git
- 也可以從 https://git-scm.com/download/mac 下載安裝包。
- 最簡單的方式是安裝 Xcode Command Line Tools。打開終端 (Terminal),輸入
- Linux (Debian/Ubuntu):
- 打開終端,輸入:
sudo apt update && sudo apt install git
- 打開終端,輸入:
- 驗證安裝:
- 安裝完成后,打開終端 (Windows 用戶可以使用 Git Bash),輸入以下命令查看 Git 版本:
如果顯示出版本號,說明安裝成功。git --version
- 安裝完成后,打開終端 (Windows 用戶可以使用 Git Bash),輸入以下命令查看 Git 版本:
第三部分:配置 Git
在你開始使用 Git 之前,需要設置你的用戶名和郵箱地址。這些信息會附加到你的每一次提交 (commit) 中,用于標識是誰做的修改。
打開終端 (或 Git Bash),執行以下命令,將引號中的內容替換為你自己的信息:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
--global
表示這個配置對你在這臺電腦上的所有 Git 倉庫都生效。- 你可以通過以下命令檢查配置是否成功:
git config --list
第四部分:本地倉庫操作
現在我們開始在你的電腦上使用 Git。
-
創建一個新項目文件夾 (或進入已有項目文件夾)
mkdir my-git-project # 創建一個名為 my-git-project 的文件夾 cd my-git-project # 進入該文件夾
-
初始化 Git 倉庫 (
git init
)
在你的項目文件夾中,執行以下命令將其初始化為一個 Git 倉庫:git init
這會在當前目錄下創建一個隱藏的
.git
子目錄,它包含了 Git 倉庫的所有元數據和對象數據庫。 -
Git 的三個區域 (重要概念)
- 工作區 (Working Directory):你實際看到和編輯文件的項目文件夾。
- 暫存區 (Staging Area / Index):一個特殊的文件,它保存了下次將要提交的文件列表信息。你可以選擇性地將工作區的修改添加到暫存區。
- 本地倉庫 (Local Repository / .git directory):Git 用來保存項目元數據和對象數據庫的地方。當你執行
git commit
時,暫存區的文件快照會被永久地儲存在本地倉庫中。
基本流程是: 在工作區修改文件 -> 將修改添加到暫存區 -> 將暫存區的修改提交到本地倉庫。
-
檢查狀態 (
git status
)
這個命令非常重要,它會告訴你當前倉庫的狀態:哪些文件被修改了?哪些文件在暫存區?等等。git status
剛初始化的倉庫,它會提示你沒有可提交的內容,但可能有未跟蹤的文件。
-
創建和修改文件
現在,我們在項目里創建一個文件,比如readme.md
:echo "# My Awesome Project" > readme.md echo "This is a project to learn Git and GitHub." >> readme.md
再次運行
git status
,你會看到readme.md
被列為 “Untracked files” (未跟蹤文件)。 -
添加到暫存區 (
git add
)
要讓 Git 開始追蹤這個文件并準備提交它的當前版本,你需要使用git add
命令。- 添加指定文件:
git add readme.md
- 添加所有已修改或新增的文件:
git add .
現在再運行
git status
,你會看到readme.md
被列為 “Changes to be committed” (待提交的更改)。 - 添加指定文件:
-
提交到本地倉庫 (
git commit
)
將暫存區的內容提交到本地倉庫,形成一個新的版本快照。每次提交都需要一個有意義的提交信息 (commit message),說明這次提交做了什么。git commit -m "Initial commit: Add readme.md"
-m
選項后面跟著的是提交信息。- 良好的提交信息非常重要!
現在運行
git status
,會提示 “nothing to commit, working tree clean” (沒有東西要提交,工作區是干凈的)。 -
查看提交歷史 (
git log
)
查看項目的提交記錄:git log
你會看到你剛才的提交,包含提交哈希值 (一個唯一的ID)、作者、日期和提交信息。
- 按
q
退出git log
的查看。 git log --oneline
會顯示更簡潔的日志。
- 按
-
進行更多修改并提交
讓我們修改readme.md
并添加一個新文件main.py
。echo "More details about the project." >> readme.md echo "print('Hello, Git!')" > main.py
運行
git status
,你會看到readme.md
被修改 (modified),main.py
是未跟蹤的。git add . # 或者 git add readme.md main.py git commit -m "Add main.py and update readme"
再次查看
git log --oneline
,你會看到兩條提交記錄。 -
分支 (Branching)
分支能在不影響主開發線 (通常是main
或master
分支) 的情況下進行開發、實驗新功能或修復 bug。-
查看分支 (
git branch
):git branch
你會看到一個名為
main
(或master
) 的分支,并且前面有一個*
號,表示你當前所在的分支。 -
創建新分支 (
git branch <branch-name>
):git branch feature-login
這創建了一個名為
feature-login
的新分支,它基于你當前所在的分支。 -
切換分支 (
git checkout <branch-name>
或git switch <branch-name>
):
git switch
是較新的命令,推薦使用。git switch feature-login
現在你就在
feature-login
分支上了。git branch
會顯示* feature-login
。 -
在分支上工作:
現在你在feature-login
分支上做的任何修改和提交都只屬于這個分支,不會影響main
分支。echo "print('Login functionality')" > login.py git add login.py git commit -m "Add basic login feature structure"
-
-
合并分支 (
git merge
)
當你完成了在feature-login
分支上的工作,并且測試通過后,你可能想把它合并回main
分支。-
首先,切換回目標分支 (通常是
main
):git switch main
-
然后,執行合并命令:
git merge feature-login
Git 會嘗試自動合并
feature-login
分支的更改到main
分支。- 如果順利,
main
分支現在就包含了feature-login
的所有提交。 - 沖突 (Conflict):如果兩個分支修改了同一個文件的同一部分,Git 可能無法自動合并,這時會發生沖突。你需要手動解決沖突,然后再次提交。 (解決沖突是進階內容,這里先了解概念)
- 如果順利,
-
刪除已合并的分支 (可選):
一旦分支被合并并且不再需要,可以刪除它:git branch -d feature-login
-
第五部分:GitHub 遠程倉庫操作
現在,我們將本地的 Git 倉庫連接到 GitHub 上的遠程倉庫,以便備份、分享和協作。
-
注冊 GitHub 賬號
如果你還沒有 GitHub 賬號,請訪問 https://github.com/ 注冊一個。 -
在 GitHub 上創建新的遠程倉庫
- 登錄 GitHub。
- 點擊右上角的 “+” 號,選擇 “New repository”。
- Repository name: 給你的倉庫起個名字 (例如,
my-git-project
,最好和本地文件夾名一致,但非必需)。 - Description (optional): 簡單描述你的項目。
- Public / Private: Public 倉庫任何人都可以看到,Private 倉庫只有你和你授權的人可以看到。初學建議 Public。
- Initialize this repository with:
- 不要勾選 “Add a README file”、“Add .gitignore” 或 “Choose a license”,因為我們本地已經有項目了,并且想把本地項目推送上去。如果勾選了,遠程倉庫會有初始提交,會和你本地倉庫的初始提交不一致,導致推送復雜化。
- 點擊 “Create repository”。
-
連接本地倉庫到遠程倉庫 (
git remote add
)
創建倉庫后,GitHub 會顯示一些指令。找到 “…or push an existing repository from the command line” 部分,那里有你的遠程倉庫 URL (通常是 HTTPS 或 SSH 格式)。我們用 HTTPS 格式。在你的本地項目文件夾的終端中,執行:
git remote add origin https://github.com/YOUR_USERNAME/YOUR_REPOSITORY_NAME.git
- 將
YOUR_USERNAME
替換為你的 GitHub 用戶名。 - 將
YOUR_REPOSITORY_NAME.git
替換為你在 GitHub 上創建的倉庫名 (如my-git-project.git
)。 origin
是這個遠程倉庫的默認別名。你可以有多個遠程倉庫,并給它們不同的別名。
你可以用
git remote -v
查看已配置的遠程倉庫。 - 將
-
推送本地更改到遠程倉庫 (
git push
)
現在,將你本地main
分支的所有提交推送到 GitHub 上的origin
遠程倉庫。git push -u origin main
push
: 推送命令。-u
(或--set-upstream
): 這個選項會將本地的main
分支與遠程的origin/main
分支關聯起來。這樣,以后你在這個分支上執行git push
或git pull
時,就不需要再指定遠程倉庫和分支名了。第一次推送時建議使用-u
。origin
: 遠程倉庫的別名。main
: 你要推送的本地分支名。
執行此命令時,Git 可能會提示你輸入 GitHub 的用戶名和密碼 (或者 Personal Access Token,對于 HTTPS 而言,密碼方式逐漸被棄用,推薦使用 Token)。
推送成功后,刷新你在 GitHub 上的倉庫頁面,就能看到你的文件和提交歷史了!
-
克隆遠程倉庫 (
git clone
)
如果你想在另一臺電腦上獲取 GitHub 上的項目,或者你想獲取別人的公開項目,可以使用git clone
。- 在 GitHub 上找到你想克隆的倉庫。
- 點擊綠色的 “Code” 按鈕,復制 HTTPS 或 SSH URL。
- 在你的電腦上,打開終端,
cd
到你想要存放項目的目錄下,然后執行:git clone https://github.com/SOMEONE_ELSE/SOME_REPOSITORY.git
這會將整個項目 (包括所有歷史記錄) 下載到你的電腦上,并自動設置好名為
origin
的遠程倉庫指向。 -
從遠程倉庫拉取更新 (
git pull
)
如果遠程倉庫有了新的提交 (比如你的同事推送了更新,或者你在 GitHub 網站上直接做了修改),你需要將這些更新拉取到你的本地倉庫。
在你的本地項目文件夾中,確保你在正確的分支上 (例如main
):git pull origin main
如果之前推送時用了
-u
選項,可以簡化為:git pull
git pull
實際上是git fetch
(從遠程獲取最新版本庫數據) 和git merge
(將遠程分支合并到當前本地分支) 兩個命令的組合。
第六部分:基本協作流程 (簡介)
當多人協作或參與開源項目時,通常會用到以下流程:
-
Fork (分叉):
- 如果你想為一個你沒有直接寫入權限的 GitHub 項目做貢獻,你可以先 “Fork” 這個項目。
- Fork 操作會在你的 GitHub 賬號下創建一個該項目的完整副本。
-
Clone (克隆):
- 將你 Fork 后的倉庫 (即你賬號下的那個副本) 克隆到你的本地電腦。
git clone https://github.com/YOUR_USERNAME/FORKED_REPOSITORY.git
-
創建分支、修改、提交、推送:
- 在你的本地倉庫中創建一個新分支來進行修改。
- 完成修改后,提交到本地倉庫。
- 將你的本地分支推送到你 Fork 的遠程倉庫 (即
origin
,指向你 GitHub 賬號下的副本)。git push origin your-feature-branch
-
Pull Request (PR / 合并請求):
- 回到你 Fork 的 GitHub 倉庫頁面,你會看到一個提示,可以基于你剛推送的分支創建一個 “Pull Request”。
- Pull Request 是請求原項目維護者將你的修改合并到他們的主項目中。
- 在 PR 中,你可以描述你的修改,項目維護者可以審查你的代碼,提出評論或要求修改,最終決定是否合并。
這是 GitHub 協作的核心。
第七部分:好習慣和下一步
- 頻繁提交,提交信息清晰:
- 每次完成一個小功能或修復一個小 bug 就進行一次提交。
- 提交信息要清晰地描述你做了什么。例如:“Fix: User login button unresponsive” 或 “Feat: Add password reset functionality”。
- 經常拉取更新: 在開始新工作前,或準備推送前,先
git pull
獲取遠程最新代碼,避免沖突。 - 使用分支: 不要直接在
main
分支上進行大量開發,為新功能、bug 修復等創建專門的分支。 - .gitignore 文件:
- 在項目中創建一個名為
.gitignore
的文件,列出那些你不想讓 Git 追蹤的文件或文件夾 (例如編譯產生的文件、日志文件、IDE 配置文件、敏感信息如 API 密鑰等)。 - 例如,一個 Python 項目的
.gitignore
可能包含:__pycache__/ *.pyc .env venv/
- GitHub 提供了很多語言和框架的
.gitignore
模板。
- 在項目中創建一個名為
下一步學習:
- 解決合并沖突
git rebase
(另一種合并分支的方式,可以使歷史更線性)git stash
(臨時保存未提交的更改)git reset
和git revert
(撤銷提交)- 標簽 (Tagging versions, e.g.,
v1.0
) - 更高級的 GitHub 功能 (Issues, Actions, Projects)
- Git GUI 客戶端 (如本文最開頭推薦的 Git + GitKraken + GitHub 可視化Git 10分鐘完全入門, GitHub Desktop, VS Code 自帶的 Git 工具),它們可以提供圖形化界面,有時更直觀。
動手實踐很關鍵,創建一個測試項目,按照上面的步驟一步步操作,多用 git status
和 git log
來觀察變化。祝你學習愉快!遇到問題隨時可以提問 GPT,通過與GPT多輪問答,可以學到幾乎所有公開知識。