Git開發實戰

? ? ? ? 本文對開發中git的常用概念和操作做一個總結。參考@綠毛鴨子的部分內容。

git分布式的體現

1.本地完整的版本庫:?

每個克隆下來的 Git 倉庫都包含了項目的所有歷史記錄、提交、分支等信息。這意味著每個開發者的本地倉庫是一個完整的版本控制系統,包括了整個項目的歷史,不僅僅是當前的工作副本。即使不連接到中央服務器,開發者依然可以執行幾乎所有的 Git 操作(如提交、分支切換、查看歷史等)。

2.無需依賴中央服務器

在 Git 中,每個開發者的本地倉庫就是一個完整的版本控制數據庫,因此不需要連接到中央服務器就能進行大多數操作(例如提交、查看歷史)。

3.離線工作、分布式協作

?提交、查看歷史記錄、創建分支、合并等操作都可以在本地進行,直到需要同步到遠程倉庫時才進行網絡操作。團隊成員之間并不是直接依賴中心服務器進行協作,而是通過推送(push)和拉取(pull)操作,將本地倉庫的更改同步到其他開發者的倉庫中。開發者可以將自己的工作分享到遠程倉庫,其他人可以從該倉庫拉取并合并更改,整個過程不需要中央服務器一直保持在線。

常用命令

git init

git init

在當前目錄下創建一個新的Git倉庫。

git status

git status

顯示當前 Git 倉庫的工作狀態。

作用

  1. 顯示當前分支:它會告訴你當前所在的分支名稱。
  2. 顯示文件更改狀態
    • Untracked files:顯示那些未被 Git 跟蹤的新文件。
    • Changes not staged for commit:顯示已經修改過但尚未添加到暫存區的文件。
    • Changes to be committed:顯示已被添加到暫存區,等待提交的文件。

git add

git add <file>

git add用于將文件的更改添加到暫存區。暫存區是一個中間區域,用于準備提交(commit)之前,標記哪些文件或文件的哪些更改將被包括在下次提交中。這個命令不會直接修改 Git 倉庫的歷史記錄,它只是告訴 Git 哪些更改是你想要在下次提交中包括的。

  1. 添加單個文件

    git add <file>

    這將把指定文件添加到暫存區,標記為已修改并準備好提交。

    示例:

    git add index.html
  2. 添加多個文件

    git add <file1> <file2> ...
    可以一次性將多個文件添加到暫存區。

    示例:

    git add file1.txt file2.txt
  3. 添加所有文件

    git add .

    這個命令會將當前目錄下的所有更改(包括新增文件、修改的文件以及刪除的文件)添加到暫存區。如果你想添加所有更改的文件,可以使用這個命令。

  4. 添加所有更改的文件(包括刪除的文件)

    git add -A

    使用 -A 參數,Git 會將所有更改的文件(包括新添加的文件、修改的文件以及刪除的文件)都添加到暫存區。(整個工作區)

  5. 添加指定模式的文件

    git add "*.txt"

    使用通配符可以添加符合特定模式的文件。例如,git add "*.txt" 會將所有 .txt 文件添加到暫存區。

  6. 添加部分文件的更改

    git add -p

    -p(patch)參數可以讓你選擇性地將某些修改的部分添加到暫存區,而不是整個文件。在運行?git add -p?命令后,Git 會逐個顯示每個文件的修改塊,并提示用戶選擇是否將該塊添加到暫存區。

    git commit

?用于將暫存區的更改(也就是已經通過 git add 命令添加到暫存區的文件)記錄到本地倉庫中的命令。每次執行 git commit 時,都會生成一個新的提交對象,并為這個提交生成一個唯一的提交哈希值。每個提交還會有一個描述性的消息,通常用來描述本次更改的內容。

主要參數:

  1. -m--message

    • 用于指定提交信息。提交信息是對本次修改的簡短描述,幫助其他人(或者自己)理解這次更改的目的。
    • 例如:git commit -m "Fix bug in login feature"
  2. --amend

    • 如果你想修改最近一次的提交,可以使用?--amend?參數。這會將最新的提交修改為當前暫存區的內容。
    • 如果你忘記添加文件或者提交信息有誤,可以通過?git commit --amend?來修正。
    • 注意:--amend?會修改歷史提交,可能會影響其他依賴該提交的工作,因此要小心使用。

    例如:git commit --amend -m "Updated commit message"

  3. --no-edit

    • 這個選項與?--amend?一起使用,表示不修改提交信息,僅修改提交的內容。
    • 例如:git commit --amend --no-edit
  4. --date="date"

    • 用于指定提交的時間戳。例如:git commit --date="2025-04-20 12:00:00" -m "Custom date for commit"
  5. -a--all

    • 在執行?git commit?時,自動將所有已跟蹤文件的修改直接提交到版本庫,而不需要使用?git add
    • 但是不會包括新文件(未跟蹤的文件)。例如:git commit -a -m "Commit all tracked changes"
  6. --author="name <email>"

    • 用于指定提交的作者。如果你希望指定不同于當前配置的作者,可以使用此選項。
    • 例如:git commit --author="John Doe <john@example.com>" -m "Custom author commit"

git三大區域

Workspace:工作區,就是你平時存放項目代碼的地方;

Index / Stage:暫存區,用于臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息,一般存放在 .git 目錄下的 index 文件(.git/index)中,所以我們把暫存區有時也叫作索引(index);

Repository:倉庫區(或本地倉庫),就是安全存放數據的位置,這里面有你提交到所有版本的數據。其中HEAD指向最新放入倉庫的版本;

Remote:遠程倉庫,托管代碼的服務器,可以簡單的認為是你項目組中的一臺電腦用于遠程數據交換;?

git 回滾

git HEAD

1.HEAD 是指向當前所在分支的最新提交的指針。當你切換分支時,HEAD 會隨之移動,指向新分支的最新提交。
2.分離 HEAD(Detached HEAD):

  • 當 HEAD 不指向任何分支,而是指向某個具體的提交時,稱為“分離的 HEAD”狀態。這通常發生在你使用?git checkout <commit>?或?git checkout <commit_hash>?時。
  • 在這種狀態下,如果你進行提交,Git 不會將新的提交與任何分支關聯,而是創建一個孤立的提交。你可以在這種狀態下進行實驗性的修改,但如果不創建新的分支來保存這些提交,它們最終可能會丟失。

git log

  1. 查看提交歷史
    git log 
    這個命令會顯示從最近的提交開始,按時間倒序列出所有提交記錄,包括提交的哈希值、作者、提交日期和提交信息。
  2. 簡潔輸出: 如果只想看到提交的簡潔信息(如提交哈希和提交信息),可以使用 --oneline 選項:

    git log --oneline

    這會顯示每個提交的一行簡潔信息,通常會看到提交的簡短哈希值和提交信息。

  3. 顯示具體的文件變更: 如果你想查看每次提交時修改了哪些文件,可以使用 --stat 選項:

    git log --stat
    這個命令會顯示每個提交的文件變更統計信息(例如,修改了多少行代碼等)。

git reflog?

git reflog記錄了 HEAD 和分支引用的歷史變動。

  • git log:記錄的是 Git 倉庫的提交歷史,即所有的 commit 對象。它顯示的是你倉庫的版本歷史(從當前 HEAD 開始),包括所有的提交、作者、日期、提交信息等。
  • git reflog:記錄的是 Git 倉庫中引用的變動歷史,即 HEAD 或分支引用(例如?master?或?develop)的移動。它不僅記錄提交,還記錄如?git checkoutgit resetgit merge?等操作如何影響引用的位置。git reflog?能幫助你追蹤本地分支的變動歷史,包括那些不再出現在提交歷史中的變動。

回滾

回滾至之前版本

git log
git reset --hard 版本號

回滾至之后版本

git reflog
git reset --hard 版本號

?

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

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

相關文章

ingress-nginx 開啟 Prometheus 監控 + Grafana 查看指標

環境已經部署了 ingress-nginx&#xff08;DaemonSet 方式&#xff09;&#xff0c;并且 Prometheus Grafana 也已經運行。但之前 /metrics 端點沒有暴露 Nginx 核心指標&#xff08;如 nginx_ingress_controller_requests_total&#xff09;&#xff0c;經過調整后現在可以正…

ThinkPHP 5.1 中的 error 和 success 方法詳解

1、success() 方法 public function someAction() {// 操作成功邏輯...return $this->success(操作成功, 跳轉地址, 額外數據); } 參數說明 參數類型說明默認值msgstring成功提示信息空字符串urlstring跳轉URLnull (不跳轉)datamixed返回的額外數據nullwaitinteger跳轉等…

抗輻照MCU在衛星載荷電機控制器中的實踐探索

摘要:在航天領域&#xff0c;衛星系統的可靠運行對電子元件的抗輻照性能提出了嚴苛要求。微控制單元&#xff08;MCU&#xff09;作為衛星載荷電機控制器的核心部件&#xff0c;其穩定性與可靠性直接關系到衛星任務的成敗。本文聚焦抗輻照MCU在衛星載荷電機控制器中的應用實踐&…

計算機視覺——相機標定

計算機視覺——相機標定 一、像素坐標系、圖像坐標系、相機坐標系、世界坐標系二、坐標系變換圖像坐標系 → 像素坐標系相機坐標系 → 圖像坐標系世界坐標系 → 相機坐標系 ? \star ? 世界坐標系 → 像素坐標系 三、相機標定 一、像素坐標系、圖像坐標系、相機坐標系、世界坐…

好未來0520上機考試題1:括號的最大嵌入深度

題目 &#xff08;LeetCode 1614.括號的最大嵌入深度&#xff09; 給定 有效括號字符串 s&#xff0c;返回 s 的嵌套深度。嵌套深度是嵌套括號的最大數量。 示例 1&#xff1a; 輸入&#xff1a;s "(1(2*3)((8)/4))1" 輸出&#xff1a;3 解釋&#xff1a;數字…

MySQL復雜SQL(多表聯查/子查詢)詳細講解

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 MySQL復雜SQL&#xff08;多表聯查/子查詢&a…

Spring中循環依賴問題的解決機制總結

一、解決機制 1. 什么是循環依賴 循環依賴是指兩個或多個Bean之間相互依賴對方&#xff0c;形成一個閉環的依賴關系。最常見的情況是當Bean A依賴Bean B&#xff0c;而Bean B又依賴Bean A時&#xff0c;就形成了循環依賴。在Spring容器初始化過程中&#xff0c;如果不加以特殊…

集運維_安裝linux,麒麟等系統_步驟

u盤工具選擇Ventoy,Rufus 在選擇Ventoy和Rufus這兩款U盤啟動盤制作工具時,需根據具體需求權衡其優缺點: ?核心差異? ?多系統支持?: ?Ventoy?:支持將多個ISO、WIM、IMG等類型的鏡像文件直接復制到U盤,實現?一盤多用?(例如同時存放Windows、Linux等鏡像),無需…

第4章:Cypher查詢語言基礎

Cypher是Neo4j的聲明式圖查詢語言&#xff0c;專為處理圖數據而設計。它允許用戶以直觀、高效的方式查詢和修改圖數據庫中的數據。本章將介紹Cypher的基本概念和語法&#xff0c;幫助讀者掌握使用Cypher進行基礎圖數據操作的能力。 4.1 Cypher語言概述 Cypher是Neo4j的主要查…

上位機知識篇---Flask框架實現Web服務

本文將簡單介紹Web 服務與前端顯示部分,它們基于Flask 框架和HTML/CSS/JavaScript實現,主要負責將實時視頻流和檢測結果通過網頁展示,并提供交互式狀態監控。以下是詳細技術解析: 一、Flask Web 服務架構 1. 核心路由設計 @app.route(/) def index():"""…

Neovim - 打造一款屬于自己的編輯器(一)

文章目錄 前言&#xff08;勸退&#xff09;neovim 安裝neovim 配置配置文件位置第一個 hello world 代碼拆分 neovim 配置正式配置 neovim基礎配置自定義鍵位Lazy 插件管理器配置tokyonight 插件配置BufferLine 插件配置自動補全括號 / 引號 插件配置 前言&#xff08;勸退&am…

按字典序排列最小的等效字符串

文章目錄 題目思路解題過程Python代碼C代碼復雜度 題目 給出長度相同的兩個字符串s1 和 s2 &#xff0c;還有一個字符串 baseStr 。 其中 s1[i] 和 s2[i] 是一組等價字符。 舉個例子&#xff0c;如果 s1 “abc” 且 s2 “cde”&#xff0c;那么就有 ‘a’ ‘c’, ‘b’ ‘…

Ubuntu2404 下搭建 Zephyr 開發環境

1. 系統要求 操作系統&#xff1a;Ubuntu2404&#xff08;64位&#xff09;磁盤空間&#xff1a;至少 8GB 可用空間&#xff08;Zephyr 及其工具鏈較大&#xff09; 2. 安裝必要工具 Tool Min. Version CMake 3.20.5 Python 3.10 Devicetree compiler 1.4.6 2.1 安裝系…

2025年06月07日Github流行趨勢

項目名稱&#xff1a;netbird 項目地址url&#xff1a;https://github.com/netbirdio/netbird項目語言&#xff1a;Go歷史star數&#xff1a;14824今日star數&#xff1a;320項目維護者&#xff1a;mlsmaycon, braginini, pascal-fischer, lixmal, pappz項目簡介&#xff1a;使…

fast-reid部署

配置設置&#xff1a; 官方庫鏈接&#xff1a; https://github.com/JDAI-CV/fast-reid# git clone https://github.com/JDAI-CV/fast-reid.git 安裝依賴&#xff1a; pip install -r docs/requirements.txt 編譯&#xff1a;切換到fastreid/evaluation/rank_cylib目錄下&a…

clickhouse 和 influxdb 選型

以下是 ClickHouse、InfluxDB 和 HBase 在體系架構、存儲引擎、數據類型、性能及場景的詳細對比分析: ??? ?一、體系架構對比? ?維度??ClickHouse??InfluxDB??HBase??設計目標?大規模OLAP分析,高吞吐復雜查詢 時序數據采集與監控,優化時間線管理高吞吐隨機…

ros創建工作空間配置運行狀態機

ROS 一、創建工作空間目錄 /home/wict/workspace/hudahua/ros/catkin_ws #初始化工作空間&#xff08;僅需一次&#xff09; catkin_init_workspace二&#xff1a;回到根目錄編譯 #創建正確的工作空間結構&#xff08;如果尚未創建&#xff09; mkdir -p ~/workspace/hudahua…

【看到哪里寫到哪里】C的“數組指針”

C里面&#xff0c;數組指針&#xff0c;不是基本類型。顧名思義&#xff0c;數組指針&#xff0c;是指針&#xff0c;是指向數組的指針&#xff1b; 1.它的基本定義樣子是 type (*ptr)[size]; 這個指針&#xff0c;指向的數組的&#xff1b;這里要注意&#xff0c;要定義數組…

深度相機的日常學習

文章目錄 一、深度相機的概念二、深度相機的工作原理三、深度相機的應用領域 一、深度相機的概念 深度相機&#xff08;Depth Camera&#xff09;是一種能夠捕捉場景中物體距離信息的設備&#xff0c;與傳統的 RGB 相機不同&#xff0c;深度相機不僅可以獲取場景的二維圖像信息…

elasticsearch基本操作筆記

1.通過kibana查看elasticsearch版本信息 a.左上角三道橫->Management->Dev Tools b.GET / 執行 c.執行結果 { “name” : “xxxx”, “cluster_name” : “xxxxxxx”, “cluster_uuid” : “vl1UudAoQp-aHWAzyPoMyw”, “version” : { “number” : “7.15.1”, “build…