Git(一):初識Git

文章目錄

  • Git(一):初識Git
    • Git簡介
      • 核心功能
      • 分布式特性
      • 結構與操作
      • 優勢與適用場景
    • 創建本地倉庫
      • git init
      • 配置name與email
      • --global
    • 工作區、暫存區與版本庫
      • git add
      • git commit
      • commit后.git的變化

Git(一):初識Git

Git簡介

Git 是一個分布式版本控制系統,由 Linus Torvalds 于 2005 年為管理 Linux 內核開發而創建 。其核心功能是跟蹤文件的修改歷史,并支持多人協作開發,使團隊成員能夠高效地管理代碼變更、回溯版本、合并修改等

核心功能

  • 版本控制:Git 通過記錄文件的每次修改(稱為“提交”),形成一個完整的版本歷史。用戶可以隨時回溯到任意版本,甚至恢復早期的代碼狀態
  • 分支與合并:Git 支持創建和管理多個分支(branch),允許開發者在獨立的分支上開發新功能或修復問題,最終通過合并(merge)將更改整合到主分支中 。這種非線性工作流程(如“功能分支”模型)顯著提升了協作效率
  • 遠程協作:Git 是分布式系統,每個開發者本地擁有完整的代碼倉庫(.git 目錄),無需依賴中心服務器。團隊成員可通過 git push 和 git pull 同步代碼,實現跨設備的協作
  • 差異比較:Git 可生成差異文件(diff),直觀展示文件或版本之間的修改內容,便于審查和調試

分布式特性

  • 本地副本:每個開發者擁有獨立的本地倉庫,即使在無網絡連接時也能獨立工作,增強了系統的魯棒性
  • 離線操作:開發者可在本地完成代碼修改、提交和分支管理,僅在需要時將更改推送到遠程倉庫(如 GitHub、GitLab)

結構與操作

  • 工作區:日常存放代碼的目錄,用戶在此進行修改
  • 暫存區(Staging Area) :用于準備提交的中間區域,通過 git add 將修改標記為待提交
  • 版本庫(.git) :隱藏的 .git 目錄存儲所有提交歷史和元數據,用戶不應直接修改該目錄
  • 遠程倉庫:托管在云端(如 GitHub、Gitee)的代碼倉庫,用于團隊協作和代碼同步

優勢與適用場景

  • 高效性:Git 的設計注重速度,尤其適合處理大型項目(如 Linux 內核)的頻繁更新
  • 靈活性:支持多種開發模式(如功能分支、特性分支),并提供豐富的命令(如 git rebasegit stash)以應對復雜需求
  • 協作能力:通過 git pullgit push,團隊成員可實時同步代碼,減少沖突并確保代碼一致性

創建本地倉庫

git init

首先需要我們創建一個文件夾并進入該文件夾中,再執行git init命令,此時文件夾中就會生成一個隱藏目錄.git,隱藏的 .git 目錄用于存儲所有提交歷史和元數據,用戶不應直接修改該目錄

在這里插入圖片描述

配置name與email

配置name和email是為了在遠程倉庫的提交記錄中明確操作者。這有助于團隊協作時追蹤代碼修改的來源,確保每個提交都能被正確歸因,命令如下:

git config --global user.name "你的名字"
git config --global user.email "你的郵箱地址"

配置成功后,可以使用如下命令查看配置項:

git config -l

在這里插入圖片描述

同時,我們也可以刪除配置項后再重新配置,用到的命令如下:

git config --global --unset user.name
git config --global --unset user.email

–global

在Git中,git config --global user.name "你的名字"命令中的--global選項表示將配置的用戶名應用到當前用戶的所有Git倉庫中。具體來說,使用--global選項時,Git會將用戶信息保存在用戶主目錄下的.gitconfig文件中,這樣無論你在哪個項目中使用Git,都會默認使用這個全局配置的用戶名和郵箱地址進行提交

使用--global配置,在刪除時也需要帶上--global

工作區、暫存區與版本庫

我們在gitcode目錄中新建一個ReadMe文件,不進行其他操作,此時Git就可以進行版本控制了嗎?

答案是不能,因為ReadMe還沒有被添加進版本庫中,只是在工作區中

  • 工作區:是在電腦上你要寫代碼或文件的目錄。

  • 暫存區:英文叫stage或index。?般存放在.git 目錄下的index文件(.git/index)中,我們把暫存區有時也叫作索引(index)

  • 版本庫:又名倉庫,英文名repository 。?作區有?個隱藏目錄.git ,它不算?作區,而是Git的版本庫。這個版本庫里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git 都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”

下面這個圖展示了工作區、暫存區和版本庫之間的關系:

在這里插入圖片描述

圖中左側為工作區,右側為版本庫。Git的版本庫里存了很多東西,其中最重要的就是暫存區

  • 在創建Git版本庫時,Git會為我們自動創建?個唯?的master分支,以及指向master的?個指 針叫HEAD(分支和HEAD的概念后面再說)
  • 當對工作區修改(或新增)的文件執行git add命令時,暫存區目錄樹的文件索引會被更新
  • 當執行提交操作 git commit 時,master分支會做相應的更新,可以簡單理解為暫存區的目錄樹才會被真正寫到版本庫中。

由上述描述我們便能得知:通過新建或粘貼進目錄的文件,并不能稱之為向倉庫中新增文件,而只是 在?作區新增了文件。必須要通過使用git addgit commit命令才能將文件添加到倉庫中進行管理!!

但是上圖中并沒有體現版本控制!我們每次**修改(新增、修改、刪除)**的內容存放在那里呢?

原因是在版本庫中還有一個名為Objects的對象庫,里面包含了創建的各種版本庫對象及內容。當執行git add命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的文件內容被寫入到對象庫中的?個新的對象中,就位于".git/objects"目錄下

git add

git add是 Git 中用于將文件修改添加到暫存區(Staging Area)的命令。暫存區是提交前保存更改的臨時區域。通過git add,可以將工作目錄中的文件修改、新增或刪除操作標記為“已暫存”,以便后續提交到版本庫

我們執行git add命令,將ReadMe文件添加到暫存區中,再查看一下.git的目錄結構:

在這里插入圖片描述

index與master中存放的都是索引,指向的是Objects中的對象

git add命令執行時有兩種方式:

  • git add后面直接加上文件名表示只添加該文件到暫存區,可以同時添加多個文件

  • git add .表示添加工作區中所有文件到暫存區

git add其他常見選項

  • 添加所有文件(包括刪除的文件)
git add -A(all)

該命令會將當前目錄下所有文件的修改、新增和刪除操作添加到暫存區,適用于一次性處理所有變更

  • 僅添加已跟蹤文件的修改和刪除
git add -u

該命令會將已跟蹤文件的修改(modified)和刪除(deleted)添加到暫存區,但不包括新增的文件(new)

  • 撤銷添加,若需撤銷git add操作,可使用git reset
git reset 

git commit

git commit是 Git 中用于記錄對存儲庫更改的核心命令。它將暫存區的內容(即通過git add添加的文件)保存為一個新的提交,并附帶描述更改的日志消息。新提交通常會成為當前分支的最新提交并更新分支指針指向它,格式如下:

git commit -m "日志信息"

在這里插入圖片描述

同時我們可以使用git log 命令來查看提交記錄,它會按時間倒序顯示當前分支的提交記錄,最近的提交在頂部。每個提交包含哈希值、作者、日期和提交信息

在這里插入圖片描述

git log --pretty=oneline可以按行打印

在這里插入圖片描述

那一長串的數字就是每次commit生成的commit id,它是每次提交的唯一標識,可以用來進行版本追蹤、數據完整性校驗、協作開發、回滾操作、代碼版本管理

git commit其他常見選項

  • 修改最近一次提交,可以用來修正提交消息或添加遺漏的文件
git commit --amend -m "新的提交消息"
  • 預覽將要提交的內容,但不實際創建提交
git commit --dry-run

commit后.git的變化

在前面的圖中,HEAD指向了master,我們來驗證一下:
在這里插入圖片描述

我們再來看一下master指向的是什么

在這里插入圖片描述

我們發現master指向了一個commit id,我們再查看一下這個commit id指向的內容,命令如下:

git cat-file -p commit id

在這里插入圖片描述

這時我們發現,它就是我們最近一次提交的日志信息,我們再來查看一下tree后面的commit id:

在這里插入圖片描述

我們一直查看到底,就會發現,其中記錄了我們在ReadMe中新增的內容,而上述所有的commit id均在Objects中有記錄
在這里插入圖片描述

?

?

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

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

相關文章

第19天:初級數據庫學習筆記3

分組函數(多行處理函數) 即多個輸入對應一個輸出。前面講的數據處理函數是單行處理函數。(在公司中常說單,多行處理函數) 分組函數包括五個: max:最大值min:最小值avg&#xff1a…

Windows11下搭建Raspberry Pi Pico編譯環境

1. 系統與工具要求 PC平臺: Windows 11 專業版 Windows GCC: gcc-15.1.0-64.exe GNU Make: 4.3 Git: 2.49.0 cmake: 4.0.2 python:3.12.11 Arm GNU Toolchain Downloads – Arm Developer 2. 工具安裝與驗證 2.1 工具安裝 winget安裝依賴工具(Windows …

【C語言極簡自學筆記】重講運算符

一、算術操作符 算術操作符描述把兩個操作數相加-第一個操作數減去第二個操作數*把兩個操作數相乘/分子除以分母%取模運算符,整除后的余數 注意:1.除號的兩端都是整數的時候執行的是整數的除法,兩端只要有一個浮點數,就執行浮點…

持續集成 CI/CD-Jenkins持續集成GitLab項目打包docker鏡像推送k8s集群并部署至rancher

Jenkins持續集成GitLab項目 GitLab提交分支后觸發Jenkis任務 之前是通過jar包在shell服務器上進行手動部署,麻煩且耗時。現通過Jenkins進行持續集成實現CI/CD。以test分支為例 提交即部署。 由于是根據自己實際使用過程 具體使用到了 gitlabjenkinsdockerharborra…

Apache Iceberg與Hive集成:非分區表篇

引言 在大數據處理領域,Apache Iceberg憑借其先進的表格式設計,為大規模數據分析帶來了新的可能。當Iceberg與Hive集成時,這種強強聯合為數據管理與分析流程提供了更高的靈活性和效率。本文將聚焦于Iceberg與Hive集成中的非分區表場景&#…

webpack 如何區分開發環境和生產環境

第一種方法: 方法出處:命令行接口(CLI) | webpack 中文文檔 1.利用webpack.config.js 返回的是個函數,利用函數的參數,來區分環境 具體步驟 1) package.json文件:在npm scripts 命令后面追加 …

React組件通信——context(提供者/消費者)

Context 是 React 提供的一種組件間通信方式,主要用于解決跨層級組件 props 傳遞的問題。它允許數據在組件樹中"跨級"傳遞,無需顯式地通過每一層 props 向下傳遞。 一、Context 核心概念 1. 基本組成 React.createContext:創建 C…

“微信短劇小程序開發指南:從架構設計到上線“

1. 引言:短劇市場的機遇與挑戰 近年來,短視頻和微短劇市場呈現爆發式增長,用戶碎片化娛樂需求激增。短劇小程序憑借輕量化、社交傳播快、變現能力強等特點,成為內容創業的新風口。然而,開發一個穩定、流暢且具備商業價…

RPC與RESTful對比:兩種API設計風格的核心差異與實踐選擇

# RPC與RESTful對比:兩種API設計風格的核心差異與實踐選擇 ## 一、架構哲學與設計目標差異 1. **RPC(Remote Procedure Call)** - **核心思想**:將遠程服務調用偽裝成本地方法調用(方法導向) - 典型行為…

【pytest進階】pytest之鉤子函數

什么是 hook (鉤子)函數 經常會聽到鉤子函數(hook function)這個概念,最近在看目標檢測開源框架mmdetection,里面也出現大量Hook的編程方式,那到底什么是hook?hook的作用是什么? what is hook ?鉤子hook,顧名思義,可以理解是一個掛鉤,作用是有需要的時候掛一個東西…

深度學習計算——動手學深度學習5

環境:PyCharm python3.8 1. 層和塊 塊(block)可以描述 單個層、由多個層組成的組件或整個模型本身。 使用塊進行抽象的好處: 可將塊組合成更大的組件(這一過程通常是遞歸) 如 圖5.1.1所示。通過定義代碼來按需生成任意復雜度…

NodeJS的fs模塊的readFile和createReadStream區別以及常見方法

Node.js 本身沒有像 Java 那樣嚴格區分字符流和字節流,區別主要靠編碼(encoding)來控制數據是以 Buffer(二進制字節)形式還是字符串(字符)形式處理。 詳細解釋: 方面JavaNode.js字節…

基于二進制XOR運算的機器人運動軌跡與對稱圖像自動生成算法

原創:項道德(daode3056,daode1212) 新的算法出現,往往能給某些行業與產業帶來革命與突破。為探索機器人運動軌跡與對稱圖像自動生成算法,本人已經通過18種算法的測試,最終,以二進制的XOR運算為…

Spring AI 項目實戰(七):Spring Boot + Spring AI Tools + DeepSeek 智能工具平臺(附完整源碼)

系列文章 序號文章名稱1Spring AI 項目實戰(一):Spring AI 核心模塊入門2Spring AI 項目實戰(二):Spring Boot + AI + DeepSeek 深度實戰(附完整源碼)3Spring AI 項目實戰(三):Spring Boot + AI + DeepSeek 打造智能客服系統(附完整源碼)4Spring AI 項目實戰(四…

spring-webmvc @RequestHeader 典型用法

典型用法 基礎用法:獲取指定請求頭值 GetMapping("/info") public String getInfo(RequestHeader("User-Agent") String userAgent) {return "User-Agent: " userAgent; }如果請求中包含 User-Agent 請求頭,則其值將被…

Ubuntu:20.04中安裝docker

是的,您列出的命令是完整的安裝步驟,但為了確保100%可靠性和處理可能的問題,我建議進行以下優化和補充: 完整優化的安裝腳本(包含錯誤處理和驗證) #!/bin/bash# 1. 徹底清理舊版本和配置 sudo apt remove…

大數據實時風控引擎:Spark Streaming、Kafka、Flink與Doris的融合實踐

大數據實時風控引擎:Spark Streaming、Kafka、Flink與Doris的融合實踐 在數字金融、電商交易與在線服務的核心戰場,風險控制能力已成為業務的生命線。傳統批量風控模式在應對瞬息萬變的欺詐攻擊、信用風險時捉襟見肘。本文將深入探討如何利用**Spark St…

【創龍瑞芯微 RK3576 全國產 ARM 八核 2.2GHz 工業開發板-硬件說明書】

前 言 本文主要介紹TL3576-EVM評估板硬件接口資源以及設計注意事項等內容。 RK3576J/RK3576處理器的IO電平標準一般為1.8V、3.3V,上拉電源一般不超過3.3V或1.8V,當外接信號電平與IO電平不匹配時,中間需增加電平轉換芯片或信號隔離芯片。按鍵或接口需考慮ESD設計,ESD器件…

一文吃透ADB,從入門到精通

目錄 一、ADB 簡介1.1 什么是 ADB1.2 ADB 的工作原理1.3 ADB 的安裝與環境配置 二、ADB 基礎命令2.1 設備連接相關命令2.2 應用管理命令2.3 文件傳輸命令 三、ADB 高級命令3.1 ADB Shell 深入探究3.2 日志查看與分析3.3 設備信息獲取3.4 屏幕操作與錄制 四、ADB 常見問題與解決…

PostgreSQL高可用架構設計與實踐指南

# PostgreSQL高可用架構設計與實踐指南 ## 一、高可用性核心訴求 PostgreSQL作為企業級關系型數據庫,高可用設計需要滿足以下關鍵指標: - 故障恢復時間(RTO):秒級到分鐘級自動切換能力 - 數據損失容忍度&#xff0…