一、Git 核心概念
1. 三個工作區域
- 工作區(Working Directory):實際編輯文件的地方。
- 暫存區(Staging Area):準備提交的文件集合(使用git add操作)。
- 本地倉庫(Local Repository):已提交的內容(通過git commit提交)。
- 遠程倉庫(Remote Repository):如 GitHub 等托管平臺上的倉庫。
2. 分支
在 Git 版本控制系統中,分支(Branch) 是指從主分支(如main或master)分離出來的獨立開發線路,每個分支都有獨立的提交歷史,允許開發者并行開展不同的開發任務。例如,當開發新功能、修復特定 Bug 或進行實驗性開發時,都可以創建獨立分支。
分支的核心優勢在于代碼隔離與并行開發:
- 功能隔離:以main(或master)作為默認分支,新功能開發可在獨立分支上進行,避免直接修改主線代碼。例如,開發電商網站的「直播帶貨」功能時,可創建feature/live-selling分支,確保核心購物流程(main分支)不受影響。
- 版本管理:不同分支可對應不同版本迭代,便于團隊分工協作。如dev分支用于日常開發,release分支用于預發布測試,hotfix分支用于緊急修復線上問題。
- 風險可控:若分支開發中出現錯誤,可隨時丟棄或回滾,不會破壞主分支穩定性,降低對整個項目的影響。
二、GitHub 遠程倉庫搭建步驟
- 注冊 GitHub 賬號訪問 GitHub 官網 注冊賬號。
- 創建新倉庫
-
- 點擊右上角 New repository → 填寫倉庫名(如 LM_Steer)→ 創建。
- 本地環境配置
-
- 安裝 Git:下載地址
-
- 配置用戶名和郵箱:
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
三、Git 基本操作
- 本地倉庫初始化
git init # 在項目目錄初始化Git倉庫
- 提交文件到本地倉庫
git add . # 添加所有文件到暫存區
git commit -m "初始提交" # 提交到本地倉庫
- 關聯遠程倉庫
git remote add origin git@github.com:用戶名/倉庫名.git # 添加遠程倉庫
- 推送至遠程倉庫
git push -u origin main # 首次推送需指定上游分支
- 拉取遠程更新
git pull origin main # 拉取并合并遠程更新
-
分支 track(追蹤分支)介紹
在 GitHub 協作開發中,追蹤分支是連接本地分支與遠程分支的橋梁。它具有兩大核心優勢:
- 自動同步更新:避免手動頻繁拉取代碼,執行git pull或git push命令時,本地分支會自動與追蹤的遠程分支交互。
- 明確關聯關系:清晰展示本地與遠程分支的對應關系,便于團隊快速掌握代碼同步狀態。
創建方式
追蹤分支的創建分為兩種場景:
- 新建分支時直接追蹤:使用命令 git checkout -b feature/xxx origin/feature/xxx,在創建本地feature/xxx分支的同時,直接設置為追蹤遠程origin/feature/xxx分支。
- 已有分支設置追蹤:通過命令 git branch --set-upstream-to=origin/xxx local_xxx,將現有本地分支local_xxx關聯至遠程origin/xxx分支。
- 如何查看并刪除遠程關聯的倉庫:
-
- 查看遠程倉庫:在本地倉庫的命令行中,輸入 git remote -v 命令,即可列出所有已關聯的遠程倉庫及其對應的 URL 地址。例如,輸出可能類似 origin https://github.com/yourusername/yourrepository.git (fetch) 和 origin https://github.com/yourusername/yourrepository.git (push),其中 origin 是默認的遠程倉庫別名。
-
- 刪除遠程倉庫:若要刪除某個遠程倉庫關聯,使用 git remote remove <遠程倉庫別名> 命令,如 git remote remove origin 即可刪除別名為 origin 的遠程倉庫關聯。也可以使用 git remote rm <遠程倉庫別名> 達到同樣效果 。
四、典型問題與解決方案
- 問題 1:認證失敗(Authentication failed)
-
- 原因:用戶名 / 密碼錯誤,或 GitHub 已禁用密碼認證。
-
- 解決方案:
-
-
- 生成 SSH 密鑰:打開終端(Windows 用戶可使用 Git Bash),輸入ssh-keygen -t ed25519 -C "your_email@example.com",其中郵箱地址替換為你的 GitHub 注冊郵箱,按三次回車鍵完成密鑰生成。密鑰文件默認存儲在用戶主目錄的.ssh文件夾下。注意添加環境變量,否則可能無法使用ssh-keygen
-
-
-
- 添加公鑰到 GitHub:找到生成的公鑰文件(后綴為.pub),使用文本編輯器打開,復制全部內容。登錄 GitHub,進入Settings -> SSH and GPG keys,點擊New SSH key,粘貼公鑰內容并添加。
-
-
-
- 測試 SSH 連接:在終端輸入ssh -T git@github.com,首次連接會提示確認,輸入yes。若出現Hi [你的用戶名]! You've successfully authenticated, but GitHub does not provide shell access.,則表示 SSH 密鑰配置成功,后續可通過 SSH 協議安全高效地操作遠程倉庫 。
-
ssh-keygen -t ed25519 -C "your_email@example.com" # 生成密鑰
# 將公鑰(~/.ssh/id_ed25519.pub)添加到GitHub
-
-
- 使用個人訪問令牌(PAT):GitHub Settings → Developer settings → Personal access tokens → 生成令牌,推送時用令牌替代密碼。
-
- 問題 2:無法使用 ssh-keygen 命令
-
- 原因:Windows 未安裝 OpenSSH 客戶端。
-
- 解決方案:
# 以管理員身份運行PowerShell
Add-WindowsCapability -Online -Name OpenSSH.Client~0.0.1.0
或安裝 Git for Windows。
- 問題 3:推送被拒絕(non-fast-forward)
-
- 原因:遠程分支有新提交,本地歷史落后。
-
- 解決方案:
git pull origin 分支名 # 先拉取合并
# 若有沖突,解決后再推送
- 問題 4:合并無關歷史(refusing to merge unrelated histories)
-
- 原因:本地與遠程倉庫無共同提交歷史。
-
- 解決方案:
git pull origin 分支名 --allow-unrelated-histories # 強制合并
- 問題 5:修改 .gitignore 不生效
-
- 原因:已跟蹤的文件不受新規則影響。
-
- 解決方案:
git rm -r --cached . # 清除緩存
git add . # 重新添加
git commit -m "更新.gitignore
- 問題6:使用push命令時,它會推送本地倉庫中所有未推送的commit。若不想將所有修改一次性推送,避免影響主分支穩定性,建議新建一個分支進行操作。具體可通過git branch new_branch_name創建新分支,再使用git checkout new_branch_name切換到新分支,在該分支上進行開發與提交,最后按需將分支合并到主分支。
五、分支管理
- 查看分支
git branch # 查看本地分支
git branch -r # 查看遠程分支
git branch -a # 查看所有分支
- 創建與切換分支
git checkout -b 新分支名 # 創建并切換到新分支
- 合并分支
git checkout main # 切換到目標分支
git merge 源分支名 # 合并源分支到當前分支
六、最佳實踐
- 保持 main 分支穩定:僅合并經過測試的代碼。
- 使用分支開發新功能:避免影響主線。
- 定期同步遠程分支:
git fetch origin # 更新遠程分支引用
- 通過 Pull Request 合并代碼:便于代碼審查。
七、常見命令速查表
操作 | 命令 |
初始化倉庫 | git init |
添加文件到暫存區 | git add <文件> |
提交到本地倉庫 | git commit -m "描述" |
查看狀態 | git status |
查看提交歷史 | git log |
拉取遠程更新 | git pull origin 分支名 |
推送至遠程 | git push origin 分支名 |
創建并切換分支 | git checkout -b 分支名 |
切換分支 | git checkout 分支名 |
合并分支 | git merge 分支名 |
刪除分支 | git branch -d 分支名 |
通過以上步驟,你可以完成 GitHub 遠程倉庫的搭建與基本操作,解決常見問題,并建立規范的開發流程。