Git 命令操作完全指南

Git 是現代軟件開發中不可或缺的分布式版本控制系統。它不僅能追蹤代碼變更,還能協調多人協作、管理項目歷史。本文從核心概念入手,逐步深入講解 Git 的基礎與高級命令,結合實用場景,幫助您從入門到精通。

一、Git 核心概念

理解 Git 的工作原理是高效使用它的前提。以下是三個核心概念及其關系:

1. 項目目錄(工作區)

項目目錄是你直接操作的本地文件夾,也叫“工作區”(Working Directory)。它包含代碼文件、配置文件等所有內容。Git 不會自動管理這里的任何文件,除非你明確告訴它哪些需要追蹤。工作區是你編寫代碼的起點。

2. 暫存區

暫存區(Staging Area 或 Index)是工作區與 Git 倉庫之間的中間層。通過 git add,你可以選擇性地將工作區的變更“暫存”到這里,準備提交。暫存區的存在讓你可以分步驟組織提交內容,而不是一次性提交所有修改。例如,你可以先暫存部分文件,檢查后再提交。

3. Git 倉庫

Git 倉庫(Repository)是存儲項目歷史和版本數據的地方。本地倉庫位于項目目錄下的 .git 文件夾,包含所有提交記錄、分支信息等。遠程倉庫(如 GitHub、GitLab)則是多人協作時的共享存儲。通過 git commit,暫存區的更改會被永久記錄到本地倉庫。

三者關系
  • 工作區 → 暫存區:通過 git add 將修改“暫存”。
  • 暫存區 → 倉庫:通過 git commit 將暫存內容提交。
  • 倉庫 → 工作區:通過 git checkoutgit restore 恢復文件。

這三層結構是 Git 的核心邏輯,貫穿所有操作。


二、基礎命令詳解

1. Git 配置(git config)

在使用 Git 前,配置用戶身份和偏好是必要步驟。這些設置會影響提交記錄和操作體驗。

  • git config --global user.name "Your Name"
    設置全局用戶名,所有提交都會攜帶此信息。例如:git config --global user.name "Alice"
  • git config --global user.email "your.email@example.com"
    設置全局郵箱,通常與代碼托管平臺(如 GitHub)賬號一致。例如:git config --global user.email "alice@example.com"
  • git config --global core.editor "vim"
    指定默認編輯器,用于編寫提交信息。支持 Vim、Nano、VS Code(需配置路徑,如 "code --wait")等。
  • git config --global core.autocrlf true
    處理換行符問題。Windows 用戶建議設為 true(自動轉換 CRLF 為 LF),Linux/Mac 用戶設為 input(僅提交時轉換)或 false(不轉換)。
  • git config --global -e
    使用默認編輯器打開全局配置文件(通常是 ~/.gitconfig),手動編輯所有設置。
案例

新手小明剛安裝 Git,他運行:

git config --global user.name "Ming"
git config --global user.email "ming@example.com"
git config --global core.editor "code --wait"

現在,他的每條提交都會標記為 “Ming ming@example.com”,并且用 VS Code 編寫提交信息。

2. 文件操作(git add / git rm / git mv)

添加文件到暫存區
  • git add file.txt
    將指定文件(如 file.txt)加入暫存區。
  • git add *.txt
    添加所有 .txt 文件,支持通配符。
  • git add .
    添加當前目錄下所有改動(新增、修改、刪除)的文件。

Git 只追蹤顯式添加的文件。每次修改已追蹤文件后,需再次 git add 更新暫存區。例如,你修改了 readme.txt,必須運行 git add readme.txt 才能提交最新版本。

刪除文件
  • git rm file.txt
    從工作區和暫存區同時刪除文件,下次提交時記錄刪除操作。
  • git rm --cached file.txt
    停止追蹤某文件,但保留工作區副本。常用于誤提交的文件(如日志文件)。
  • git rm -r bin/
    遞歸刪除文件夾及其內容(如 bin/ 目錄)。
重命名或移動
  • git mv oldname.txt newname.txt
    重命名文件并更新暫存區。例如:git mv readme.md README.md
  • git mv file.txt dir/
    將文件移動到指定目錄。
案例

小明新建了 test.txt,并運行:

git add test.txt

后來他決定重命名:

git mv test.txt test_new.txt

若想刪除:

git rm test_new.txt

3. 查看狀態(git status)

  • git status
    顯示當前工作區和暫存區的狀態,包括:
    • 未暫存的修改(Changes not staged for commit)。
    • 已暫存待提交的內容(Changes to be committed)。
    • 未追蹤的文件(Untracked files)。
  • git status -s
    簡潔輸出,例如:
    • M file.txt:已修改但未暫存。
    • A file.txt:已暫存的新文件。
    • ?? newfile.txt:未追蹤文件。
案例

小明修改了 main.py 并新增 notes.txt,運行 git status

Changes not staged for commit:modified:   main.py
Untracked files:notes.txt

他運行 git add .,再檢查:

Changes to be committed:modified:   main.pynew file:   notes.txt

4. 提交更改(git commit)

  • git commit -m "Fix the bug"
    提交暫存區內容,附帶簡潔消息。社區慣例使用現在時,如 “Add feature” 而不是 “Added feature”。
  • git commit
    打開默認編輯器(如 Vim)輸入多行提交信息。保存并關閉后提交。
  • git commit -a
    自動暫存所有已追蹤文件的修改并提交,但不包括新增文件。
注意事項
  • 提交消息要清晰。例如:"Update login validation logic""Update" 更具描述性。
  • -a 不適用于新文件,需先 git add
案例

小明修復了一個 bug:

git add bugfix.py
git commit -m "Fix login error handling"

若想跳過暫存:

git commit -a -m "Update readme"

5. 查看差異(git diff)

  • git diff
    比較工作區與暫存區的差異。
  • git diff --staged
    比較暫存區與上次提交的差異。
  • git diff HEAD
    比較工作區與上次提交的差異(包括未暫存和已暫存)。
配置差異工具
  • git config --global diff.tool vscode
    使用 VS Code 查看差異。
  • git config --global difftool.vscode.cmd "code --wait --diff $LOCAL $REMOTE"
    設置調用命令。
  • git difftool
    啟動配置的工具。
輸出解讀
  • 綠色 +:新增行。
  • 紅色 -:刪除行。
  • @ 符號:指示變更位置。
案例

小明修改了 main.py,運行 git diff

- print("Hello")
+ print("Hello, Git!")

暫存后運行 git diff --staged,確認變更正確。

6. 查看歷史(git log / git show)

  • git log
    顯示提交歷史,每條包括哈希值、作者、日期和消息。
  • git log --oneline
    每條提交一行,僅顯示哈希和消息。
  • git log --oneline --reverse
    正序顯示簡潔歷史。
  • git log --graph
    顯示分支合并圖。
  • git show d601
    查看指定提交(d601 是哈希前綴)的詳情。
  • git show HEAD
    查看最新提交。
  • git show HEAD~1
    查看上一次提交。
案例

小明運行 git log --oneline

d601f2e Fix the bug
a3b9c1d Add main.py

他用 git show d601f2e 查看具體變更。

7. 文件列表與結構

  • git ls-files
    列出暫存區追蹤的文件。
  • git ls-tree HEAD
    顯示當前提交的樹結構,包括文件和目錄。
案例

小明運行 git ls-files

main.py
readme.txt

8. 撤銷操作(git restore)

  • git restore file.txt
    丟棄工作區中 file.txt 的未暫存修改。
  • git restore --staged file.txt
    將暫存區的 file.txt 撤銷回工作區。
  • git restore --source=HEAD~1 file.txt
    恢復文件到上一次提交的狀態。
案例

小明誤改了 readme.txt,運行:

git restore readme.txt

若已暫存,運行:

git restore --staged readme.txt

三、遠程倉庫操作

遠程倉庫是團隊協作的關鍵,常用平臺包括 GitHub、GitLab 和 Bitbucket。

1. 初始化與克隆

  • git init
    在當前目錄創建新倉庫。
  • git clone https://github.com/user/repo.git
    克隆遠程倉庫到本地,自動關聯遠程。
案例

小明克隆項目:

git clone https://github.com/ming/project.git
cd project

2. 關聯遠程倉庫

  • git remote add origin https://github.com/user/repo.git
    添加遠程倉庫,命名為 origin
  • git remote -v
    查看關聯的遠程地址。
  • git remote remove origin
    刪除關聯。

3. 推送與拉取

  • git push origin main
    推送本地 main 分支到遠程。
  • git push -u origin main
    推送并設置上游分支,便于后續簡化為 git push
  • git pull origin main
    拉取遠程 main 分支并合并。
案例

小明提交后推送:

git push origin main

若遠程有更新:

git pull origin main

4. 分支管理

  • git branch
    列出本地分支,帶 * 表示當前分支。
  • git branch -r
    列出遠程分支。
  • git branch feature
    創建分支 feature
  • git checkout feature
    切換到 feature 分支。
  • git checkout -b feature
    創建并切換。
  • git push origin feature
    推送分支到遠程。
案例

小明開發新功能:

git checkout -b login-feature
git add login.py
git commit -m "Add login validation"
git push origin login-feature

四、高級用法與技巧

1. 分支合并與沖突解決

  • git merge feature
    feature 分支合并到當前分支。
  • 沖突解決:若有沖突,Git 會標記沖突文件。手動編輯后:
    git add resolved_file.txt
    git commit
    
案例

小明合并分支:

git checkout main
git merge login-feature

若沖突,編輯文件后提交。

2. 變基(git rebase)

  • git rebase main
    將當前分支變基到 main,保持線性歷史。
  • git rebase -i HEAD~3
    交互式變基,修改最近三次提交。

3. 回滾操作

  • git reset --soft HEAD~1
    撤銷最后一次提交,保留修改。
  • git reset --hard HEAD~1
    撤銷提交并丟棄修改。

4. 忽略文件

創建 .gitignore 文件,內容如:

*.log
node_modules/

運行 git add .gitignore 并提交。


五、常見問題與解答

  1. 誤刪文件怎么辦?
    若未提交:git restore file.txt。若已提交:git checkout HEAD file.txt
  2. 提交錯了消息?
    修改最后一次提交:git commit --amend -m "New message"
  3. 推送被拒絕?
    先拉取更新:git pull --rebase,再推送。

六、結語

Git 的強大在于其靈活性和分布式特性。從基礎的 addcommit 到遠程協作的 pushpull,再到分支管理和沖突解決,本文涵蓋了日常開發所需的核心操作。通過實踐這些命令,您將能高效管理代碼并與團隊協作。繼續探索 stashtag 等高級功能,Git 將成為您開發的得力助手!

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

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

相關文章

深入剖析帶頭循環雙向鏈表的實現與應用

引言 場景描述 想象一個 環形地鐵線路(如深圳地鐵11號線),這條線路首尾相連,列車可以順時針或逆時針循環行駛。為了方便管理,地鐵系統設置了一個 “虛擬調度中心”(頭節點),它不承…

DeepSeek Smallpond 在火山引擎 AI 數據湖的探索實踐

資料來源:火山引擎-開發者社區 DeepSeek Smallpond 介紹 Smallpond 是一套由 DeepSeek 推出的 、針對 AI 領域,基于 Ray 和 DuckDB 實現的輕量級數據處理引擎,具有以下優點: 1.輕量級 2.高性能 3.支持規模大 4.無需運維 5.P…

Linux進程間的通信

進程間通信 1.進程間通信介紹2.匿名命名管道原理操作 1.進程間通信介紹 1.1 進程間通信目的:一個進程需要將他的數據發送給另一個進程,大家應該都多少接觸過linux中的管道符"|",這個符號就是用來多個命令執行,在Linux中…

直播預告 | TDgpt 智能體發布 時序數據庫 TDengine 3.3.6 發布會即將開啟

從海量監控數據,到工業、能源、交通等場景中實時更新的各類傳感器數據,時序數據正在以指數級速度增長。而面對如此龐雜的數據,如何快速分析、自動發現問題、精準預測未來,成為企業數字化轉型過程中的關鍵挑戰。 TDengine 的答案是…

手撕FIO工具指南:從壓測翻車到避坑實戰

文章目錄 手撕FIO工具指南:從壓測翻車到避坑實戰一、背景:一次FIO壓測引發的驚魂夜二、FIO vs 其他IO工具:為何讓人又愛又怕?三、安裝指南:避開依賴地獄四、參數詳解五、避坑指南:血淚經驗總結六、安全壓測…

智能汽車圖像及視頻處理方案,支持視頻星軌拍攝能力

美攝科技作為智能汽車圖像及視頻處理領域的先行者,正以革新性的技術引領著行業的未來發展。美攝科技智能汽車圖像及視頻處理方案,一個集高效性、智能化、畫質增強于一體的創新解決方案,旨在重塑智能汽車圖像畫質的新標準,并支持前…

B站左神算法課學習筆記(P7):圖

目錄 一、圖的存儲方式(千奇百怪) 1)鄰接表 2)鄰接矩陣 3)其他 4)推薦存儲方式(代碼) 二、圖的遍歷 (1)寬度優先遍歷 (2)深度…

深度解析「前綴和」與「差分法」:高效算法的基石

深度解析前綴和與差分法:高效算法的基石 在計算機科學和數據處理領域,前綴和(Prefix Sum)與差分法(Difference Method)是兩種基礎且高效的算法技術。它們在處理數組的區間查詢和區間修改操作時&#xff0c…

2-1 基本放大電路

放大的概念 mV →V mA→A 特征:放大功率(電壓與電流)。 本質:能量在控制下的轉換。(外接供電電源) 必要條件:有源元件(能量控制原件) 前提:不失真 測試的…

詳解接口的常見請求方式

詳解接口的常見請求方式 一、 常見接口請求方式1. GET2. POST3. PUT4. DELETE5. PATCH6. HEAD7. OPTIONS 二、 實現方法1. 前端實現2. 后端實現 三、 作用與主要區別四、 舉例講解1. 創建 Spring Boot 工程2. 添加依賴3. 編寫 Controller 實現接口關鍵點說明 4. 啟動與測試5. 總…

【附代碼】【MILP建模】3D裝箱問題(3D-Bin Packing Problem)

文章目錄 相關教程相關文獻問題描述建模思路——carton 方向平行軸建模方法(9變量6約束)平行軸建模方法(4變量8約束)枚舉建模方法(6變量1約束) 建模思路——carton 位置平行軸建模方法枚舉建模方法 Bin長寬…

【計算機網絡中的奈氏準則與香農定理】

文章目錄 一、前言二、奈氏準則1. 概念2. 奈氏準則公式3. 奈氏準則的意義 三、香農定理1. 概念2. 香農定理公式3. 香農定理的意義 四、奈氏準則與香農定理的對比五、應用示例1. 奈氏準則示例2. 香農定理示例 六、總結 一、前言 在計算機網絡中,數據的傳輸速率與信道…

【C++】回調函數和回調對象

文章目錄 回調可調用對象函數指針作回調函數對象作回調函數對象的使用std::function【C11】作回調使用 【C11】Lambda表達式作回調【C11】bind對象作回調std::bind的使用作回調使用 回調 當發生某種事件時需要調用或觸發另一個事件即為回調,回調的核心即為將可調用…

DeepSeek助力文案,智能音箱如何改變你的生活?

你好,我是三橋君 你有沒有為寫智能音箱的宣傳文案而抓耳撓腮過?三橋君在這方面可是有些感想,今天就來給你嘮嘮怎么用DeepSeek寫出超贊的智能音箱宣傳文案。 首先,你得給DeepSeek喂足“料”。這就好比做飯,你得準備好各…

【區塊鏈安全 | 第一篇】密碼學原理

文章目錄 1.哈希函數1.1 哈希函數的性質1.2 常見哈希算法1.3 Merkle Tree(默克爾樹)1.4 HMAC(哈希消息認證碼) 2. 公鑰密碼學2.1 對稱加密 vs 非對稱加密2.2 RSA 算法2.3 ECC(橢圓曲線密碼學)2.4 Diffie-He…

基于websocketpp實現的五子棋項目

該博客對于學完C和linux操作系統,但不知道如何用C開發項目,已經不知道C如何使用第三方庫的人來說一定很有幫助,請耐心看完! 先看一下游戲會顯示的前端界面,對理解這個游戲的前后端交互過程會有幫助 1. 開發環境 1.1 …

基于Redis分布鎖+事務補償解決數據不一致性問題

基于Redis的分布式設備庫存服務設計與實現 概述 本文介紹一個基于Redis實現的分布式設備庫存服務方案,通過分布式鎖、重試機制和事務補償等關鍵技術,保證在并發場景下庫存操作的原子性和一致性。該方案適用于物聯網設備管理、分布式資源調度等場景。 …

RK3568筆記八十: Linux 小智AI環境搭建

若該文為原創文章,轉載請注明原文出處。 最近小智AI火了,韋老師出了 Linux 小智 AI 聊天機器人 版本,想移植到 RK3568上, 由于和韋老師硬件不同,所以需要交叉編譯一些庫,為后續移植做準備。 一、環境 1、…

C# SerialPort 使用詳解

總目錄 前言 在工業控制、物聯網、嵌入式開發等領域,串口通信(Serial Port Communication)是連接串行設備(如條碼掃描器、GPS接收器等)與計算機的重要手段。C# 提供了內置的 SerialPort 類,簡化了串口開發…

3D點云的深度學習網絡分類(按照作用分類)

1. 3D目標檢測(Object Detection) 用于在點云中識別和定位目標,輸出3D邊界框(Bounding Box)。 🔹 方法類別: 單階段(Single-stage):直接預測3D目標位置&am…