git本地倉庫,工作區和暫存區的知識

一 git工作原理

Git 的工作原理基于分布式版本控制,通過管理文件的不同版本狀態,實現代碼的追蹤、協作和回溯。除了常見的工作區(Working Directory)暫存區(Staging Area/Index),核心還包括本地倉庫(Local Repository)遠程倉庫(Remote Repository),這四個區域構成了 Git 工作流程的基礎。

1. 工作區(Working Directory)

  • 定義:就是你本地電腦中能看到的項目文件夾,是你正在編輯的文件所在的目錄。
  • 作用:用于臨時存放當前正在修改的文件,這些文件可能處于“未跟蹤(Untracked)”或“已修改(Modified)”狀態。
  • 舉例:你在項目里新增、刪除或修改文件,這些操作都會先反映在工作區。

2. 暫存區(Staging Area/Index)

  • 定義:位于 .git 目錄下的一個特殊文件(.git/index),也叫“索引”,用于臨時存放即將提交到本地倉庫的文件快照。
  • 作用:相當于一個“提交緩沖區”,可以選擇性地將工作區中修改后的文件加入暫存區,方便按邏輯分批提交(而不是一次性提交所有修改)。
  • 操作:通過 git add <文件> 命令將工作區的修改添加到暫存區。

3. 本地倉庫(Local Repository)

  • 定義:位于項目根目錄下的 .git 隱藏文件夾,是 Git 真正的“倉庫核心”,存儲了所有版本的元數據(提交歷史、分支、標簽等)和文件的完整快照。
  • 作用:永久保存項目的所有版本歷史,支持本地提交、分支創建、版本回溯等操作,無需依賴網絡。
  • 操作:通過 git commit 命令將暫存區的內容提交到本地倉庫,生成一個新的版本號(SHA-1 哈希值)。

4. 遠程倉庫(Remote Repository)

  • 定義:托管在遠程服務器上的倉庫(如 GitHub、GitLab、Gitee 等),是多人協作時共享代碼的中心。
  • 作用:用于同步本地倉庫的修改,實現多人之間的代碼交換和協作(例如推送本地提交、拉取他人修改)。
  • 操作:通過 git push 將本地倉庫的提交推送到遠程倉庫,通過 git pull 拉取遠程倉庫的更新到本地。

核心工作流程(四區域聯動)

  1. 工作區修改文件(新增、編輯、刪除)。
  2. git add 將需要提交的修改從工作區放到暫存區
  3. git commit暫存區的內容提交到本地倉庫,生成版本記錄。
  4. git push本地倉庫的提交推送到遠程倉庫,同步給團隊成員;或用 git pull遠程倉庫拉取更新到本地,保持同步。

補充:Git 的“版本快照”特性

Git 與其他版本控制工具(如 SVN)的核心區別是:Git 不存儲文件的“差異”,而是對暫存區的文件狀態生成完整快照并保存到本地倉庫。每次提交時,Git 會記錄當前暫存區所有文件的狀態,這也是 Git 本地操作速度快、支持離線工作的原因。

理解這四個區域的分工,就能清晰掌握 Git 的操作邏輯(例如為什么 git commit 只提交暫存區內容,而 git add 是提交前的必要步驟)。

二 git pull 會更新本地倉庫和工作區

git pull 的執行流程并不直接“更新暫存區”,而是通過合并操作直接影響工作區本地倉庫,暫存區在這個過程中主要起“臨時緩存沖突文件”的作用。具體流程如下:

1. git pull 的本質:fetch + merge

git pull 本質是兩個步驟的組合:

  • 第一步:git fetch → 將遠程倉庫的更新下載到本地倉庫(.git 目錄),此時本地倉庫的遠程跟蹤分支(如 origin/main)會被更新,但工作區和暫存區完全不變。
  • 第二步:git merge → 將遠程跟蹤分支(如 origin/main)的更新合并到當前本地分支(如 main),這一步會直接修改工作區,并可能涉及暫存區。

2. 合并過程對工作區和暫存區的影響

(1)無沖突的情況:

合并順利完成時:

  • 工作區:會直接被更新為合并后的內容(遠程更新 + 本地未提交的修改會被保留,除非與遠程更新沖突)。
  • 暫存區:不會主動被“更新”,只有在合并完成后,暫存區的狀態仍保持合并前的樣子(即你之前 git add 的內容不會被覆蓋)。
(2)有沖突的情況:

當遠程更新與本地修改沖突時:

  • 工作區:沖突文件會被標記沖突內容(如 <<<<<<< HEAD 分隔符),需要手動編輯解決。
  • 暫存區:沖突文件會被放入暫存區(狀態為 unmerged),直到你解決沖突后用 git add 標記為“已解決”,此時暫存區才會記錄沖突解決后的內容。

總結

git pull 不會“先更新暫存區,再更新工作區”,而是:

  • 直接通過合并操作修改工作區(應用遠程更新)。
  • 暫存區僅在沖突時臨時緩存未解決的沖突文件,或在沖突解決后通過 git add 記錄最終內容,并非“被主動更新”。

這也是為什么 git pull 前最好保證工作區干凈(先 git commitgit stash 本地修改),避免合并沖突時打亂正在編輯的內容。

三 總結

git 有暫存區,工作區,本地倉庫,遠程倉庫,
git fetch 將遠程倉庫的更新只下載到本地倉庫,不會修改工作區和暫存區的文件。
git pull 不直接“更新暫存區”,只更新本地倉庫和工作區

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

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

相關文章

MPU6050模塊

一&#xff1a;MPU6050簡介輸出一個隨姿態變化而變化的電壓&#xff0c;想要量化電壓&#xff0c;就得使用ADC轉化歐拉角偏航角&#xff08;Yaw&#xff09;&#xff1a;也叫航向角&#xff0c;通常是繞 z 軸旋轉的角度&#xff0c;以 x 軸正向為起始邊&#xff0c;旋轉后 x 軸…

jvm的棧和堆

在 JVM 中&#xff0c;棧&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;是兩種核心內存區域&#xff0c;用于存儲不同類型的數據&#xff0c;它們的設計和存儲規則有明確區分&#xff0c;主要體現在存儲內容、生命周期和管理方式上&#xff1a;一、棧&#xf…

自動駕駛車輛的敏捷安全檔案

簡介近年來&#xff0c;在開發安全關鍵軟件時&#xff0c;敏捷開發方法的使用日益增多。敏捷方法非常適合自動駕駛汽車軟件的增量改進、運行設計域的逐步擴展以及新型智能路側單元的開發。由于車輛和智能路側單元的預期改進&#xff0c;未來幾年將會有新的自動駕駛車輛試驗。因…

【時時三省】(C語言基礎)動態內存分配與它的指針變量

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省什么是內存的動態分配全局變量是分配在內存中的靜態存儲區的&#xff0c;非靜態的局部變量&#xff08;包括形參&#xff09;是分配在內存中的動態存儲區的&#xff0c;這個存儲區是一個稱為棧…

SpringMVC的核心架構與請求處理流程

Spring MVC 核心架構核心組件組件作用類比DispatcherServlet前端控制器&#xff0c;統一接收請求并協調各組件處理一個餐廳的前臺HandlerMapping根據請求URL映射到對應的處理器&#xff08;Controller&#xff09;路由表HandlerAdapter執行處理器方法&#xff0c;處理參數綁定、…

css 不錯的按鈕動畫

效果圖wxml <view class"{{status?active:}}"><view class"up-top btn"><text>向上</text></view><view class"up-left btn"><text>向左</text></view><view class"up-center b…

若依框架RuoYi-Vue-Plus-5.X的啟動,本地安裝docker,再部署 Redis、PG數據庫(智慧水務)SmartWaterServer

一、部署redis數據庫拉取鏡像 docker pull redis啟動Redis容器docker run -d --name redis-server -p 6379:6379 -v redis-data:/data redis redis-server --requirepass 123redis版本二、部署PostgreSQL 數據庫拉取鏡像docker pull postgres:15 創建數據存儲目錄、建議將數據掛…

Idea 清除無用的引用類

在IntelliJ IDEA中&#xff0c;你可以通過以下方式將選中的代碼設置為大寫&#xff1a;1. 使用快捷鍵(推薦)Windows/Linux&#xff1a;Ctrl Shift UMac&#xff1a;Cmd Shift U操作步驟&#xff1a;選中文本按下快捷鍵&#xff0c;即可在大小寫之間切換。2. 通過菜單操作選…

同個主機拉取不同權限倉庫的方法

背景&#xff1a;因為某些神奇的原因&#xff0c;無法同時授權倉庫權限給自己。 1.本地電腦只有權限訪問web倉庫地址&#xff0c;無權限訪問backend倉庫&#xff1b; 2.堡壘機服務器只有權限訪問backend倉庫&#xff0c;無權限訪問web倉庫地址。 web倉庫地址 &#xff1a;codeu…

快速搭建Node.js服務指南

Node.js是構建高效、可擴展網絡應用的理想選擇。以下是幾種快速搭建Node.js服務的方法。 方法一&#xff1a;使用Express&#xff08;最流行框架&#xff09; 1. 初始化項目 mkdir my-node-service cd my-node-service npm init -y2. 安裝Express npm install express3. 基礎服…

通義千問Qwen3-30B-A3B-Thinking-2507技術解析:推理模型的工程實踐突破

Qwen3-30B-A3B模型架構圖2025年7月30日&#xff0c;阿里云通義千問團隊發布了Qwen3-30B-A3B-Thinking-2507推理模型&#xff0c;這是繼Qwen3-30B-A3B-Instruct-2507后的又一力作。作為專注于推理任務的專用模型&#xff0c;它在數學能力測試AIME25上取得85.0分&#xff0c;超越…

【源力覺醒 創作者計劃】文心一言與deepseek集成springboot開發哪個更方便

一.實驗背景 當前文心一言和deepseek都開源了&#xff0c;二者都可以作為大模型應用開發的模型基礎了&#xff0c;我們都可以編寫springboot項目來集成deepseek和文心一言了 二.實驗目標 本文基于實際操作&#xff0c;通過實際操作來對比文心一言和deepseek在集成到springbo…

核磁共振數據T2幾何均值計算

1、T? 幾何均值公式如下&#xff1a;2、核磁T2幾何均值計算代碼 CSV 文件文件格式&#xff1a; 每一行是一個樣點&#xff08;樣品深度&#xff09;&#xff0c;列為&#xff1a;第一列是“深度”或其他&#xff1b;第二列及以后&#xff08;如 TASPEC0 ~ TASPEC199&#xff0…

微服務架構技巧篇——接口類設計技巧

目錄 一、微服務架構的特點 二、微服務接口類設計技巧 2.1、BFF(Backend For Frontend) 2.1.1、 服務分布式帶來的第一個挑戰導致的幾個典型問題 2.1.2、什么是 BFF 2.1.3、BFF 應用場景 2.1.4、BFF 落地經驗 2.1.4.1、前端負責 BFF 開發優缺點 2.1.4.2、后端負責 BFF 開發優…

C++游戲開發(2)

直接上代碼 1.首先是頭文件編寫 #include <iostream> #include <graphics.h> #include <string> 2,添加畫布 長1280&#xff0c;寬720 initgraph(1280, 720); 3.添加主循環 bool running true; while(runing) { } 4.定義結構體變量msg ExMessge msg; 5.開…

Unity開發2D類銀河惡魔城游戲學習筆記目錄

Unity開發2D類銀河惡魔城游戲學習筆記 Unity教程&#xff08;零&#xff09;Unity和VS的使用相關內容 玩家狀態機 Unity教程&#xff08;一&#xff09;開始學習狀態機 Unity教程&#xff08;二&#xff09;角色移動的實現 Unity教程&#xff08;三&#xff09;角色跳躍的實現…

智慧社區項目開發(三)——基于 Spring Boot 實現動態路由加載:從數據庫到前端菜單的完整方案

在后臺管理系統中&#xff0c;不同用戶角色往往擁有不同的操作權限&#xff0c;對應的菜單展示也需動態調整。動態路由加載正是解決這一問題的核心方案 —— 根據登錄用戶的權限&#xff0c;從數據庫查詢其可訪問的菜單&#xff0c;封裝成前端所需的路由結構并返回。本文將詳細…

Python在自動化與運維領域的核心角色:工具化、平臺化與智能化

&#x1f4dd;個人主頁&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; 引言 在 IT 系統日益復雜、運維任務持續增長的今天&#xff0c;自動化已成為企業基礎設施管理的關鍵方向。Python 以其簡潔的語法、強大…

RAG實戰指南 Day 28:RAG系統緩存與性能優化

【RAG實戰指南 Day 28】RAG系統緩存與性能優化 開篇 歡迎來到"RAG實戰指南"系列的第28天&#xff01;今天我們將深入探討RAG系統的緩存機制與性能優化策略。在實際生產環境中&#xff0c;RAG系統往往面臨高并發、低延遲的需求&#xff0c;而合理的緩存設計和性能優…

swanlab實驗優雅起名

init中的參數的作用project&#xff1a;整個實驗的名字&#xff1b;experiment_name&#xff1a;在這個實驗中&#xff0c;你的名字是什么&#xff1b; 比如說現在我們要進行對比實驗&#xff0c;PEAN和Triflownet分別是對比方法的名字&#xff0c;這樣的好處是&#xff0c;她們…