Git版本控制系統

Git作為目前最流行的分布式版本控制系統,已經成為開發者必備的技能之一。本文將全面介紹Git的核心概念、基本操作、分支管理以及與GitHub的協作開發,幫助讀者從零開始掌握Git的使用。

一、Git概述

1.1 Git發展歷史

Git誕生于2005年,由Linux之父Linus Torvalds開發。當時Linux內核開發社區與BitKeeper(當時使用的版本控制系統)的合作關系終止,促使Linus開發了Git這一全新的版本控制系統。Git的設計目標包括:

  • 極快的速度

  • 簡單的設計

  • 強大的非線性分支支持(支持上千個并行開發分支)

  • 完全分布式架構

  • 高效處理大型項目(如Linux內核)

1.2 Git與SVN對比

特性Git(分布式)SVN(集中式)
架構每個開發者都有完整倉庫副本只有一個中央倉庫
網絡依賴大部分操作不需要網絡幾乎所有操作都需要網絡
分支處理輕量級分支,創建/切換快速分支是目錄拷貝,操作較慢
提交速度本地提交,極快必須連接服務器,較慢
歷史查看本地即可查看完整歷史需要連接服務器查看歷史
適用場景適合分布式團隊協作適合集中管理的團隊

二、Git安裝與配置

2.1 Windows系統安裝

  1. 下載Git:訪問Git官網下載Windows版本

  2. 安裝Git

    • 運行安裝程序

    • 基本保持默認選項,一路"Next"

    • 安裝完成后可在右鍵菜單看到Git選項

  3. 安裝TortoiseGit(圖形界面工具)

    • 下載TortoiseGit并安裝

    • 安裝過程中配置Git路徑(通常是C:\Program Files\Git\bin\git.exe

    • 設置用戶名和郵箱(用于標識提交者)

  4. 安裝中文語言包(可選)

    • 下載對應版本的中文語言包

    • 安裝后在TortoiseGit設置中選擇中文界面

2.2 基本配置

配置全局用戶名和郵箱:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

查看配置信息:

git config --list

三、Git基礎操作

3.1 創建倉庫

命令行方式

mkdir myproject
cd myproject
git init

圖形界面方式

  1. 在文件夾中右鍵選擇"Git在這里創建版本庫"

  2. 確認后會在目錄下生成.git隱藏文件夾

3.2 工作區與暫存區

  • 工作區:實際看到的項目目錄

  • 暫存區(stage/index):臨時存放修改的地方

  • 版本庫.git目錄,存儲所有版本數據

文件狀態變化流程:

工作區 → git add → 暫存區 → git commit → 版本庫

3.3 基本操作命令

  1. 添加文件到暫存區

git add filename  # 添加單個文件
git add .         # 添加所有修改
  1. 提交到版本庫

git commit -m "提交說明"
  1. 查看狀態

git status
  1. 查看修改內容

git diff       # 查看工作區與暫存區差異
git diff --cached  # 查看暫存區與版本庫差異
  1. 查看提交歷史

git log
git log --pretty=oneline  # 簡潔顯示

3.4 撤銷修改

  1. 丟棄工作區修改

git checkout -- filename
  1. 從暫存區撤回

git reset HEAD filename
  1. 版本回退

git reset --hard HEAD^    # 回退到上一個版本
git reset --hard commit_id  # 回退到指定版本

四、遠程倉庫

4.1 GitHub使用

  1. 創建SSH Key

ssh-keygen -t rsa -C "your.email@example.com"

生成的公鑰(id_rsa.pub)內容添加到GitHub賬戶的SSH Keys中

  1. 添加遠程倉庫

git remote add origin git@github.com:username/repo.git
  1. 推送本地分支

git push -u origin master  # 第一次推送
git push origin master    # 后續推送
  1. 克隆遠程倉庫

git clone git@github.com:username/repo.git

4.2 遠程操作命令

  1. 查看遠程倉庫

git remote -v
  1. 從遠程獲取更新

git fetch origin   # 只獲取不合并
git pull origin master  # 獲取并合并
  1. 刪除遠程分支

git push origin --delete branch_name

五、分支管理

5.1 分支基本操作

  1. 創建分支

git branch dev      # 創建分支
git checkout dev    # 切換分支
git checkout -b dev # 創建并切換
  1. 查看分支

git branch     # 查看本地分支
git branch -r  # 查看遠程分支
git branch -a  # 查看所有分支
  1. 合并分支

git checkout master  # 切換到主分支
git merge dev        # 合并dev分支
  1. 刪除分支

git branch -d dev    # 刪除已合并分支
git branch -D dev    # 強制刪除未合并分支

5.2 解決沖突

當合并分支出現沖突時:

  1. 手動編輯沖突文件(Git會用<<<<<<<=======>>>>>>>標記沖突內容)

  2. 解決沖突后重新添加并提交:

git add filename
git commit -m "解決沖突"

5.3 分支策略

推薦的工作流程:

master分支:僅用于發布穩定版本
dev分支:集成開發分支
feature分支:開發新功能(每個功能一個分支)

六、Git高級技巧

6.1 忽略文件

創建.gitignore文件,添加需要忽略的文件模式:

# 忽略所有.class文件
*.class# 忽略target目錄
target/# 忽略特定文件
config.properties

6.2 儲藏(Stash)

臨時保存工作現場:

git stash        # 儲藏當前修改
git stash list   # 查看儲藏列表
git stash apply  # 恢復最近一次儲藏
git stash drop   # 刪除儲藏
git stash pop    # 恢復并刪除儲藏

6.3 標簽管理

  1. 創建標簽

git tag v1.0          # 輕量標簽
git tag -a v1.0 -m "版本1.0"  # 附注標簽
  1. 查看標簽

git tag
git show v1.0
  1. 推送標簽

git push origin v1.0     # 推送單個標簽
git push origin --tags   # 推送所有標簽

七、Git圖形工具

7.1 TortoiseGit常用操作

  1. 克隆倉庫

    • 右鍵選擇"Git克隆"

    • 填寫URL和目標目錄

  2. 提交修改

    • 右鍵選擇"Git提交"

    • 選擇要提交的文件,填寫提交信息

  3. 查看歷史

    • 右鍵選擇"顯示日志"

  4. 分支操作

    • 右鍵選擇"創建分支"/"切換/檢出"

7.2 IDE集成(IntelliJ IDEA)

  1. 配置Git路徑

    • File → Settings → Version Control → Git

  2. 導入項目到Git

    • VCS → Import into Version Control → Create Git Repository

  3. 提交更改

    • 點擊工具欄√圖標或Ctrl+K

  4. 推送更改

    • VCS → Git → Push

  5. 更新項目

    • VCS → Update Project 或 工具欄↓圖標

八、Git最佳實踐

  1. 提交規范

    • 提交信息清晰明確,說明做了什么修改

    • 推薦格式:<類型>: <描述>,如feat: 添加用戶登錄功能

  2. 分支策略

    • 主分支保持穩定,開發在新分支進行

    • 功能分支盡量小而專注

  3. 頻繁提交

    • 小步提交,每個提交解決一個問題

    • 避免大而全的提交

  4. 代碼審查

    • 使用Pull Request進行代碼審查

    • 確保代碼質量后再合并到主分支

九、常見問題解答

Q1: 如何撤銷已經推送的提交?

git revert commit_id  # 創建反向提交
git push

Q2: 如何修改最后一次提交?

git commit --amend

Q3: 如何找回刪除的分支?

git reflog  # 查看操作歷史
git checkout -b branch_name commit_id

Q4: 如何解決合并沖突?

  1. 手動編輯沖突文件

  2. 刪除沖突標記(<<<<<<<,?=======,?>>>>>>>)

  3. 保存后添加并提交

十、學習資源推薦

  1. Pro Git電子書

  2. Git官方文檔

  3. GitHub Guides

  4. Learn Git Branching(交互式學習)

結語

Git作為現代軟件開發的核心工具,掌握它將極大提升你的開發效率。本文涵蓋了Git的基礎知識到高級技巧,建議讀者在學習的同時多加實踐。記住,Git的學習曲線可能有些陡峭,但一旦掌握,你將體會到它帶來的巨大便利。

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

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

相關文章

如何編譯RustDesk(Unbuntu 和Android版本)

編譯Linux版本的RustDesk備注&#xff1a;官方文檔上&#xff0c;一邊都是基于sciter&#xff0c;這個在后面已經不建議使用了&#xff0c;但是依然可以編譯剛開始的時候看官方的文檔&#xff0c;涉及的東西比較多&#xff0c;也搞的一頭霧水&#xff0c;通過B站上一個視頻&…

Spring中的循環依賴:解密、破局與架構啟示

> 當兩個Bean緊緊相擁,Spring容器卻陷入死鎖——這是Java開發者的經典噩夢 某電商平臺凌晨上線時突然宕機,日志里反復滾動著`BeanCurrentlyInCreationException`的報錯。經排查,**優惠券服務與庫存服務在初始化時相互依賴**,形成致命閉環。這個價值百萬的故障案例,揭開…

DataFrame?(數據框)

一種二維表格型數據結構&#xff0c;類似于電子表格&#xff08;如 Excel&#xff09;或 SQL 表&#xff0c;由行&#xff08;記錄&#xff09;?和列&#xff08;字段&#xff09;?組成。它是數據分析、機器學習和科學計算中最常用的數據結構之一&#xff0c;尤其在 ?Python…

B站視頻評論數據爬取

爬取B站視頻評論數據爬取與分析 如果只要單純的腳本可以直接看項目結構里的b_comments.py 一、技術架構 1、環境配置 Python 3.8PyCharm 2、模塊配置 requests&#xff1a;用于發送HTTP請求time&#xff1a;用于處理時間相關的操作csv&#xff1a;用于讀寫CSV文件json&#xff…

OpenAI最新大模型GPT-4o體驗之Code Copilot AI編程大模型

一、前言GPT-4o&#xff08;"o"代表"全能"&#xff09;具備處理各種文本、聲音和圖像資料的能力&#xff0c;能夠輸出多種格式的文本、聲音和圖像。GPT-4o 的推出標志著 AI 技術的重大突破。它不再局限于單一媒介&#xff0c;而是首次實現了文本、語音和圖…

社交電商推客系統全棧開發指南:SpringCloud+分潤算法+Flutter跨端

一、推客系統概述與市場背景推客系統&#xff08;TuiKe System&#xff09;是一種基于社交關系的營銷推廣平臺&#xff0c;通過用戶分享商品或服務鏈接&#xff0c;實現裂變式傳播和精準營銷。近年來&#xff0c;隨著社交電商的蓬勃發展&#xff0c;推客系統已成為企業獲客的重…

網安-中間件-Redis未授權訪問漏洞

目錄 Redis Redis持久化 動態修改配置 使用反彈連接的情況 常見監聽端口的方式 常見建立反彈連接的方式 流程 Linux crontab cron文件存儲路徑 利用Redis實現攻擊 1.webshell提權案例 2.定時任務shell反彈案例 3.SSH Key getshell案例 ?編輯Redis其他利用方式 …

【c++深入系列】:萬字詳解棧和隊列和deque(附模擬實現的源碼)

&#x1f525; 本文專欄&#xff1a;c &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 石頭能被水滴穿&#xff0c;不是因為水有多強&#xff0c;而是因為它從未停過。 ★★★ 本文前置知識&#xff1a; 模版 棧 那么棧這個…

速通python加密之RSA加密

RSA加密 RSA加密是一種非對稱加密算法&#xff08;與AES等對稱加密不同&#xff09;&#xff0c;由羅納德李維斯特&#xff08;Ron Rivest&#xff09;、阿迪薩莫爾&#xff08;Adi Shamir&#xff09;和倫納德阿德曼&#xff08;Leonard Adleman&#xff09;于1977年提出&…

Java BeanUtils 類詳解:作用、語法與示例

一、BeanUtils 的核心作用BeanUtils 是 Apache Commons 和 Spring Framework 提供的工具類&#xff0c;主要用于簡化 JavaBean 的操作。核心功能包括&#xff1a;屬性拷貝&#xff1a;對象間同名屬性自動復制動態訪問&#xff1a;通過字符串名稱操作屬性類型轉換&#xff1a;自…

PyCharm高效開發全攻略

安裝與基礎配置下載PyCharm專業版或社區版&#xff08;免費&#xff09;并完成安裝。首次啟動時選擇默認設置或自定義主題、字體大小等界面偏好。配置Python解釋器路徑&#xff08;推薦使用虛擬環境&#xff09;&#xff0c;確保項目依賴隔離。快捷鍵與導航熟悉核心快捷鍵能大幅…

Pycharm 給 python 程序打包EXE的配置和方法

前言: Python 語言的設計變得越來越簡單,它有很多可以使用的庫,所以尤其在人工智能時代,Python語言被廣泛應用。但是Python語言和windows系統的兼容性稍微偏弱,如何生成windows可以執行的exe文件。是要一個很復雜的配置過程,本文就會做一個介紹。 本文,通過一個Python…

【Linux | 網絡】傳輸層(UDP和TCP)

目錄一、再談端口號1.1 端口號1.2 端口號的范圍劃分1.3 常見知名端口號1.4 netstat 命令1.5 進程與端口號的關系1.6 pidof 命令二、UDP協議2.1 UDP協議段格式2.2 如何理解UDP報頭和UDP報文2.2.1 UDP報頭2.2.2 UDP報文和UDP報文的管理2.2.3 UDP封裝過程2.3 UDP的特點2.4 UDP的緩…

mybatisX的自定義模板生成

在idea中使用mybtais的自定義模板生成&#xff0c;可以幫我們省去很多重復的代碼。 打開一個項目&#xff0c;我們要修改的主要就兩個文件&#xff0c;一個是生成的mapper接口&#xff0c;另一個是xml文件&#xff1a; 相應的mapper接口模板為&#xff1a; package ${mapper…

miniz:一個輕量級、高性能的開源壓縮庫

目錄 1.簡介 2.核心特性 3.基本使用示例 4.與 ZLIB 的對比 5.使用場景 6.注意事項 1.簡介 miniz 是一個輕量級、高性能的開源壓縮庫&#xff0c;專注于提供 ZLIB/GZIP 兼容的壓縮和解壓縮功能。它的核心優勢在于體積小巧&#xff08;單文件實現&#xff09;、跨平臺支持和…

Jenkins接口自動化測試(構建)平臺搭建

Python接口自動化測試零基礎入門到精通&#xff08;2025最新版&#xff09;自動化測試流程 在進行平臺搭建前&#xff0c;我們首先要問自己&#xff1a;我需要搭建的平臺的功能是什么&#xff0c;要實現什么目標&#xff1f; 在我的理解中&#xff0c;自動化構建平臺的執行流…

Day 22: 復習

機器學習數據處理與降維技術復習總結 前言 經過6天的學習&#xff0c;我們系統地學習了從基礎的Numpy數組操作到高級的降維算法&#xff0c;這些內容構成了機器學習數據預處理的重要知識體系。本文將對這一系列學習內容進行全面復習和總結&#xff0c;幫助大家建立完整的知識…

力扣 hot100 Day56

46. 全排列 給定一個不含重復數字的數組 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 //抄的 class Solution { private:vector<vector<int>>result;vector<int> path; public:void backtracking(vector<int>& nu…

Android 編碼規范全指南

在 Android 開發領域&#xff0c;代碼不僅是功能實現的載體&#xff0c;更是團隊協作與項目迭代的基礎。一套完善的編碼規范&#xff0c;能讓代碼從 “可運行” 升級為 “易維護、可擴展、低風險”。本文基于 Google、Square 等頂尖團隊的實踐經驗&#xff0c;結合國內 Android…

[RPA] Excel中的字典處理

案例1一個Excel文件總共有2個Sheet頁&#xff0c;分別為總表和對照表通過對照表sheet頁&#xff0c;設置價格對照字典對照表循環總表sheet頁&#xff0c;根據循環到的商品名稱&#xff0c;找到對應字典中的價格&#xff0c;并計算出總價總表將總價寫入到Excel表中C列&#xff0…