軟件工程實踐一:Git 使用教程(含分支與 Gitee)

文章目錄

    • 目標
    • 一、快速上手
      • 1. Windows 安裝 Git
      • 2. 初始化 / 克隆
    • 二、核心概念速覽
    • 三、常用命令清單
      • 1) 查看狀態與差異
      • 2) 添加與提交
      • 3) 歷史與回溯
      • 4) 撤銷與恢復(Git 2.23+ 推薦新命令)
      • 5) 忽略文件
    • 四、分支與合并(Branch & Merge)
      • 1) 創建與切換
      • 2) 更新主干與合并
      • 3) 推送與合并回主干
      • 4) 解決沖突
      • 5) 常見工作流
    • 五、遠程協作(Remote)
      • 1) 添加與管理遠程
      • 2) 獲取與推送
      • 3) 追蹤分支(上游)
    • 六、Gitee(碼云)使用
      • 1) 創建倉庫
      • 2) 使用賬號密碼或個人訪問令牌(推薦)
      • 3) 綁定遠程并推送(以 HTTPS 為例)
      • 4) 從 GitHub 遷移到 Gitee(鏡像)
    • 七、進階:變基、挑揀、暫存與標簽
      • 1) 交互式變基(整理提交歷史)
      • 2) 挑揀(把某提交拷到當前分支)
      • 3) 暫存(臨時擱置工作)
      • 4) 標簽(發布打標)
    • 八、常見問題速查
    • 九、實戰練習:20 步從零到協作

目標

  • 掌握 Git 基礎概念與常用命令:倉庫、提交、暫存區、分支
  • 熟悉常見工作流:創建/切換分支、合并、變基、解決沖突
  • 了解遠程協作:添加遠程、推送/拉取、使用 Gitee(碼云)

提示:Windows 可使用 Git Bash 或 PowerShell(需先安裝 Git for Windows)。


原文鏈接:https://blog.ybyq.wang/archives/1095.html


一、快速上手

1. Windows 安裝 Git

  • 下載與安裝
    • 前往 Git for Windows 官網 或 Gitee 鏡像站下載安裝包
    • 雙擊安裝包,按向導進行安裝
  • 驗證與基礎配置
git --version
which bash
# 基本配置(簽名和默認分支)
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
git config --global color.ui auto
# Windows:換行符自動轉換(跨平臺推薦)
git config --global core.autocrlf true
# 可選:將 VS Code 設為默認編輯器
git config --global core.editor "code --wait"
  • 賬號與 Gitee 綁定(推薦使用個人訪問令牌)
# 方式一:賬號密碼(不推薦)
# 推送時按提示輸入 Gitee 用戶名和密碼# 方式二:個人訪問令牌(推薦,更安全)
# 1. 登錄 Gitee → 個人設置 → 私人令牌
# 2. 創建令牌并勾選需要的權限(如 projects)
# 3. 推送時用戶名填 Gitee 用戶名,密碼填該令牌

2. 初始化 / 克隆

# 初始化本地倉庫(在當前目錄創建 .git)
git init# 克隆遠程倉庫
git clone <repo-url>

二、核心概念速覽

  • 工作區(Working Directory):你看到的文件
  • 暫存區(Staging Area):下次提交的快照
  • 本地倉庫(Local Repository):提交歷史(HEAD 指向的分支)
  • 遠程倉庫(Remote):如 origin(GitHub/Gitee 等)

三、常用命令清單

1) 查看狀態與差異

git status                  # 當前狀態
git diff                    # 工作區 vs 暫存區
git diff --staged           # 暫存區 vs 最近一次提交

2) 添加與提交

git add <file>              # 添加到暫存區
git add .                   # 添加所有修改
git commit -m "feat: add user api"  # 提交# 修改上一條提交信息(未推送時)
git commit --amend -m "fix: correct message"

3) 歷史與回溯

git log --oneline --graph --decorate --all# 查看某次提交內容
git show <commit>

4) 撤銷與恢復(Git 2.23+ 推薦新命令)

# 丟棄工作區更改(小心使用)
git restore <file># 從暫存區移除(保留工作區修改)
git restore --staged <file># 還原一個提交(生成反向提交)
git revert <commit># 重置分支到某提交(危險,謹慎)
# --soft: 僅移動 HEAD;--mixed: 重置暫存區;--hard: 丟棄工作區
git reset --mixed <commit>

5) 忽略文件

創建 .gitignore

# Java/IDE 示例
/target/
*.class
*.log
.idea/
*.iml
.DS_Store

四、分支與合并(Branch & Merge)

1) 創建與切換

# 創建并切換到新分支
git switch -c feature/login
# 在已有分支間切換
git switch main

2) 更新主干與合并

# 將 feature/login 合并到 main
git switch main
git merge feature/login# 同步主干最新(需先配置遠程)
git fetch origin
git switch main
git pull --rebase origin main# 回到功能分支并合并主干變更
git switch feature/login
# 策略 1:合并提交(保留分叉歷史)
git merge main --no-ff -m "merge main into feature/login"
# 策略 2:變基(歷史更線性)
# 說明:將當前分支的提交“挪到” main 最新之后,減少合并提交
git rebase main

3) 推送與合并回主干

# 首次推送功能分支并建立上游
git push -u origin feature/login# 發起合并(建議 PR/MR 流程),或本地合并:
git switch main
git merge --no-ff feature/login -m "feat(login): implement basic login"
git push origin main

4) 解決沖突

# 沖突后,編輯沖突文件并標記已解決
git add <conflicted-files>
# 若在 rebase 流程:
git rebase --continue
# 若放棄 rebase:
git rebase --abort

5) 常見工作流

  • Git Flow:main + develop + feature/release/hotfix(適合版本節奏固定)
  • Trunk-Based:main + 短分支 + 小步快跑 + CI(多數團隊推薦)

五、遠程協作(Remote)

1) 添加與管理遠程

git remote -v
# 添加遠程別名 origin
git remote add origin <url>
# 修改遠程地址
git remote set-url origin <new-url>

2) 獲取與推送

git fetch origin                  # 僅拉取,不更新本地分支
git pull --rebase origin main     # 拉取并變基(歷史更干凈)
git push origin main              # 推送

3) 追蹤分支(上游)

# 建立本地分支與遠程上游的關聯(首次)
git push -u origin feature/x
# 之后即可:
# git push
# git pull --rebase
# 如有沖突:
# git add .
# git rebase --continue 或 git merge --continue

六、Gitee(碼云)使用

1) 創建倉庫

  • 登錄 Gitee,新建倉庫,獲取 HTTPS 或 SSH 地址

2) 使用賬號密碼或個人訪問令牌(推薦)

# 方式一:賬號密碼(推送時按提示輸入)
# 方式二:個人訪問令牌(推薦)
#   1) Gitee 個人設置 → 私人令牌
#   2) 創建令牌并勾選權限(如 projects)
#   3) 推送時用戶名=Gitee 用戶名,密碼=個人令牌

3) 綁定遠程并推送(以 HTTPS 為例)

# 在已有本地倉庫中添加 origin(Gitee)
git remote add origin https://gitee.com/<your-namespace>/<repo>.git
# 首次推送(設置上游)
git push -u origin main

4) 從 GitHub 遷移到 Gitee(鏡像)

  • 方案 A:在 Gitee 倉庫設置中使用“從 GitHub 導入倉庫”
  • 方案 B:本地設置兩個遠程,手動推送
git remote add github git@github.com:<ns>/<repo>.git
git remote add gitee  https://gitee.com/<ns>/<repo>.git
# 推送全部分支與標簽
git push gitee --all
git push gitee --tags

七、進階:變基、挑揀、暫存與標簽

1) 交互式變基(整理提交歷史)

git rebase -i HEAD~5  # squash / fixup / reword / reorder

2) 挑揀(把某提交拷到當前分支)

git cherry-pick <commit>

3) 暫存(臨時擱置工作)

git stash push -m "wip: refactor"
git stash list
git stash apply  # 或 pop

4) 標簽(發布打標)

git tag v1.0.0
git tag -a v1.0.1 -m "hotfix"
git push origin --tags

八、常見問題速查

  • push 被拒絕:先 git fetch,再 git rebase origin/main 或開分支提 PR
  • Detached HEAD:git switch <branch> 回到分支;需要保存可新建分支 git switch -c temp
  • 誤刪文件:從最近提交恢復 git restore --source=HEAD -- <file>
  • 大文件入庫:考慮 Git LFS;或加入 .gitignore 并清理歷史
  • 行尾換行混亂:檢查 core.autocrlf 設置;跨平臺建議 true

九、實戰練習:20 步從零到協作

場景:在本地新建項目 → 管理變更 → 分支開發 → 合并與解決沖突 → 連接遠程并推送 → 打標簽與回滾。命令可在 PowerShell 或 Git Bash 中執行。要求:提交信息使用中文,示例代碼使用 Java。

  1. 新建目錄并初始化倉庫
mkdir demo-git && cd demo-git
git init
  1. 配置用戶名郵箱(僅首次或需要覆蓋時)
git config user.name "學生"
git config user.email "student@example.com"
  1. 創建 README 并首次提交(中文提交信息)
echo "# Demo Git 項目" > README.md
git add README.md
git commit -m "初始化倉庫并添加 README"
  1. 新建 .gitignore 并提交(中文提交信息)
echo -e "/dist/\n*.log" > .gitignore
git add .gitignore
git commit -m ".gitignore:忽略構建產物和日志"
  1. 創建 Java 主類并提交(App v1)
mkdir src
# 寫入 src/App.java(v1)
echo "public class App {" > src/App.java
echo "  public static void main(String[] args) {" >> src/App.java
echo "    System.out.println(\"v1\");" >> src/App.java
echo "  }" >> src/App.java
echo "}" >> src/App.javagit add src/App.java
git commit -m "新增 Java 主類 App(v1)"
  1. 創建功能分支并切換
git switch -c feature/login
  1. 在功能分支新增登錄功能類(提交 1)
# 寫入 src/AuthService.java(僅 login)
echo "public class AuthService {" > src/AuthService.java
echo "  public boolean login() { return true; }" >> src/AuthService.java
echo "}" >> src/AuthService.javagit add src/AuthService.java
git commit -m "登錄功能:新增 AuthService,包含 login 方法"
  1. 在功能分支完善登出功能(提交 2)
# 覆蓋寫入,新增 logout 方法
echo "public class AuthService {" > src/AuthService.java
echo "  public boolean login() { return true; }" >> src/AuthService.java
echo "  public boolean logout() { return true; }" >> src/AuthService.java
echo "}" >> src/AuthService.javagit add src/AuthService.java
git commit -m "登錄功能:補充 logout 方法"
  1. 切回主分支并做一次修復(覆蓋重寫 App.java)
git switch main
# 將 App.java 覆蓋為含 HOTFIX 的版本
echo "public class App {" > src/App.java
echo "  public static void main(String[] args) {" >> src/App.java
echo "    System.out.println(\"v1\");" >> src/App.java
echo "    System.out.println(\"HOTFIX\");" >> src/App.java
echo "  }" >> src/App.java
echo "}" >> src/App.javagit add src/App.java
git commit -m "主分支修復:修正啟動日志(HOTFIX)"
  1. 將主干變更同步到功能分支(rebase,更線性)
git switch feature/login
git rebase main
  1. 若出現沖突則解決并繼續(無沖突可跳過)
# 編輯有沖突的文件,確認內容后:
git add .
git rebase --continue
  1. 將功能分支合并回主干(無快進,保留記錄)
git switch main
git merge --no-ff feature/login -m "合并 feature/login:登錄功能完成"
  1. 查看提交歷史圖
git log --oneline --graph --decorate --all
  1. 創建發布標簽(v1.0.0)
git tag -a v1.0.0 -m "首次發布版本"
  1. 添加遠程并首次推送(以 Gitee 為例,替換為你的倉庫)
git remote add origin https://gitee.com/<your-namespace>/<repo>.git
git push -u origin main
  1. 推送功能分支與標簽
git push -u origin feature/login
git push origin --tags
  1. 創建新分支新增 Banner 類,并將提交挑揀到 main
git switch -c feature/banner
# 寫入 src/Banner.java
echo "public class Banner {" > src/Banner.java
echo "  public static void show() { System.out.println(\"BANNER\"); }" >> src/Banner.java
echo "}" >> src/Banner.javagit add src/Banner.java
git commit -m "新增 Banner 類:打印橫幅"
# 回到 main,通過分支名挑揀該提交(取分支 tip 提交)
git switch main
git cherry-pick feature/banner
  1. 制造一個誤提交并回退工作區/暫存區
echo "wrong" > tmp.txt
git add tmp.txt
# 發現誤加:從暫存區移除,保留工作區
git restore --staged tmp.txt
# 丟棄工作區更改(小心)
git restore tmp.txt
  1. 修改最近一次提交的提交信息(未推送前),并升級 App 到 v2
# 覆蓋寫入 App.java(v2)
echo "public class App {" > src/App.java
echo "  public static void main(String[] args) {" >> src/App.java
echo "    System.out.println(\"v1\");" >> src/App.java
echo "    System.out.println(\"v2\");" >> src/App.java
echo "  }" >> src/App.java
echo "}" >> src/App.javagit add src/App.java
git commit -m "升級主程序至 v2"
# 發現提交信息需要更準確:
git commit --amend -m "App 升級:輸出 v1 與 v2"
  1. 回滾某次已推送的功能(生成反向提交,安全)
# 假設要回滾上一步提交:
git revert HEAD
# 推送到遠程:
git push origin main

提示:

  • 如遇推送被拒絕,先執行 git fetchgit pull --rebase origin main 同步。
  • 在多人協作中,建議使用 Pull Request/Merge Request 進行代碼評審與合并。

作者:xuan
個人博客:https://blog.ybyq.wang
歡迎訪問我的博客,獲取更多技術文章和教程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96646.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96646.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96646.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

css`min()` 、`max()`、 `clamp()`

min() 用來計算多個數值中最小的那個&#xff0c;非常適合做自適應。 width: min(50vw, 500px) 50vw 表示 視口寬度的 50% 500px 表示 500px min(50vw, 500px) 表示會取兩者中 最小的那個 作為最終的寬度&#xff0c;。 使用場景 限制某個元素寬度不超過某個值&#xff1b; 響…

【WRF-VPRM 預處理器】HEG 安裝(服務器)-MRT工具替代

目錄 HEG 安裝 驗證 HEG 安裝與否 設置環境變量(建議) 命令行接口(Command Line Interface) hegtool 工具 hegtool 用法 Header File 格式 功能1:`gdtif` 工具 – MISR 數據處理 `gdtif` 使用方式 參數文件格式(Parameter File Format) 功能2:`resample` 工具 – 重采樣…

PyTorch 神經網絡

神經網絡是一種模仿人腦神經元鏈接的計算模型&#xff0c; 由多層節點組成&#xff0c; 用于學習數據之間的復雜模式和關系。神經網絡通過調整神經元之間的連接權重來優化預測結果&#xff0c;這個過程可以涉及到向前傳播&#xff0c;損失計算&#xff0c;反向傳播和參數更新。…

詳細解析蘋果iOS應用上架到App Store的完整步驟與指南

&#x1f4f1;蘋果商店上架全流程詳解 &#x1f469;?&#x1f4bb;想要將你的App上架到蘋果商店&#xff1f;跟隨這份指南&#xff0c;一步步操作吧&#xff01; 1?? 申請開發者賬號&#xff1a;訪問蘋果開發者網站&#xff0c;注冊并支付99美元年費&#xff0c;獲取開發者…

三維GIS開發實戰!Cesium + CZML 實現火箭飛行與分離的 3D 動態模擬

CZML是一種基于JSON的數據格式&#xff0c;專門用于在Cesium中描述3D場景和時間動態數據。本文將詳細介紹了CZML的特點&#xff08;JSON格式、時間動態性、層次結構等&#xff09;和基本組件&#xff0c;并給出了一個火箭發射的實例。通過搭建Cesium開發環境&#xff08;使用vi…

Spring Boot 深入剖析:BootstrapRegistry 與 BeanDefinitionRegistry 的對比

在 Spring Boot 的啟動過程中&#xff0c;BootstrapRegistry 和 BeanDefinitionRegistry 是兩個名為“Registry”卻扮演著截然不同角色的核心接口。理解它們的差異是深入掌握 Spring Boot 啟動機制和進行高級定制開發的關鍵。BootstrapRegistry public static ConfigurableAppl…

貪心算法應用:速率單調調度(RMS)問題詳解

Java中的貪心算法應用&#xff1a;速率單調調度(RMS)問題詳解 1. 速率單調調度(RMS)概述 速率單調調度(Rate Monotonic Scheduling, RMS)是一種廣泛應用于實時系統中的靜態優先級調度算法&#xff0c;屬于貪心算法在任務調度領域的經典應用。 1.1 基本概念 RMS基于以下原則&…

Cesium4--地形(OSGB到3DTiles)

1 OSBG OSGB&#xff08;OpenSceneGraph Binary&#xff09;是基于 OpenSceneGraph&#xff08;OSG&#xff09; 三維渲染引擎的二進制三維場景數據格式&#xff0c;廣泛用于存儲和傳輸傾斜攝影測量、BIM、點云等大規模三維模型&#xff0c;尤其在國產地理信息與智慧城市項目中…

多語言共享販賣機投資理財共享售賣機投資理財系統

多語言共享販賣機投資理財/共享售賣機分紅/充電寶/充電樁投資理財系統 采用thinkphp內核開發&#xff0c;支持注冊贈金、多級分銷&#xff0c;功能很基礎 修復后臺用戶列表管理 可自定義理財商品 多種語言還可以添加任意語言 源碼開源 多級分銷 注冊贈金等

[Windows] PDF 專業壓縮工具 v3.0

[Windows] PDF 專業壓縮工具 v3.0 鏈接&#xff1a;https://pan.xunlei.com/s/VOZwtC_5lCF-UF6gkoHuxWMoA1?pwdchg8# PDF 壓縮工具 3.0 新版功能特點 - 不受頁數限制&#xff01; 一、核心壓縮功能 1.多模式智能壓縮 支持 4 種壓縮模式&#xff1a;平衡模式&#xff08…

SHEIN 希音 2026 校招 內推 查進度

SHEIN 希音 2026 校招 內推 查進度 &#x1f3e2;公司名稱&#xff1a;SHEIN 希音 &#x1f4bb;招聘崗位&#xff1a;前端、后端、測試、產品、安全、運維、APP 研發、數據分析、設計師、買手、企劃、招商、管培生 &#x1f31f;內推碼&#xff1a;NTA2SdK &#x1f4b0;福利待…

ARM (6) - I.MX6ULL 匯編點燈遷移至 C 語言 + SDK 移植與 BSP 工程搭建

回顧一、核心關鍵字&#xff1a;volatile1.1 作用告訴編譯器&#xff1a;被修飾的變量會被 “意外修改”&#xff08;如硬件寄存器的值可能被外設自動更新&#xff09;&#xff0c;禁止編譯器對該變量進行優化&#xff08;如緩存到寄存器、刪除未顯式修改的代碼&#xff09;。本…

Vue中使用keep-alive實現頁面前進刷新、后退緩存的完整方案

Vue中使用keep-alive實現頁面前進刷新、后退緩存的完整方案 在Vue單頁應用中&#xff0c;路由切換時組件默認會經歷完整的銷毀-重建流程&#xff0c;這會導致兩個典型問題&#xff1a;從搜索頁跳轉到列表頁需要重新加載數據&#xff0c;而從詳情頁返回列表頁又希望保留滾動位置…

Visual Studio Code 安裝與更新故障排除:從“拒絕訪問”到成功恢復

Visual Studio Code 安裝與更新故障排除&#xff1a;從“拒絕訪問”到成功恢復的實踐分析 摘要&#xff1a; 本文旨在探討 Visual Studio Code (VS Code) 在安裝與更新過程中常見的故障&#xff0c;特別是涉及“拒絕訪問”錯誤、文件缺失以及快捷方式和任務欄圖標異常等問題。…

簡單UDP網絡程序

目錄 UDP網絡程序服務端 封裝 UdpSocket 服務端創建套接字 服務端綁定 運行服務器 UDP網絡程序客戶端 客戶端創建套接字 客戶端綁定 運行客戶端 通過上篇文章的學習&#xff0c;我們已經對網絡套接字有了一定的了解。在本篇文章中&#xff0c;我們將基于之前掌握的知識…

如何解決 pip install 安裝報錯 ModuleNotFoundError: No module named ‘requests’ 問題

Python系列Bug修復PyCharm控制臺pip install報錯&#xff1a;如何解決 pip install 安裝報錯 ModuleNotFoundError: No module named ‘requests’ 問題 摘要 在日常Python開發過程中&#xff0c;pip install 是我們最常用的依賴安裝命令之一。然而很多開發者在 PyCharm 控制臺…

解釋 ICT, Web2.0, Web3.0 這些術語的中文含義

要理解“ICT Web2.0”術語的中文含義&#xff0c;需先拆解為 ICT 和 Web2.0 兩個核心概念分別解析&#xff0c;再結合二者的關聯明確整體指向&#xff1a; 1. 核心術語拆解&#xff1a;中文含義與核心定義 &#xff08;1&#xff09;ICT&#xff1a;信息與通信技術 中文全稱&am…

IDEA版本控制管理之使用Gitee

使用Gitee如果之前沒用過Gitee&#xff0c;那么IDEA中應該長這樣&#xff08;第一次使用&#xff09;如果之前使用過Gitee&#xff0c;那么IDEA中應該長這樣這種情況&#xff0c;可以先退出Gitee&#xff0c;再拉取Gitee&#xff0c;退出Gitee方法見文章底部好&#xff0c;那么…

NLP(自然語言處理, Natural Language Processing)

讓計算機能夠理解、解釋、操縱和生成人類語言&#xff0c;從而執行有價值的任務。 關注社區&#xff1a;Hugging Face、Papers With Code、GitHub 是現代NLP學習不可或缺的資源。許多最新模型和代碼都在這里開源。 ①、安裝庫 pip install numpy pandas matplotlib nltk scikit…

后端json數據反序列化枚舉類型不匹配的錯誤

后端json數據反序列化枚舉類型不匹配的錯誤后端返回的json格式在前端反序列化報錯System.Text.Json.JsonException:“The JSON value could not be converted to TodoReminderApp.Models.Priorityen. Path: $.Data.Items.$values[0].Priority | LineNumber: 0 | BytePositionIn…