主頁 > 軟體工程 > Git 常用命令總結

Git 常用命令總結

2022-09-19 10:25:38 軟體工程

1. 狀態

1.1 檔案狀態

2. 分支

2.1 分支常用命令

  • git branch xxx:新建分支
  • git checkout xxx:切換分支
  • git checkout -b xxx:新建分支并切換到該分支(相當于上面兩條命令)
  • git branch -d xxx:洗掉分支
  • git branch:查看分支串列
  • git push origin --delete xxx:洗掉遠程分支
  • git fetch:從服務器上拉取資料,當 git fetch 命令從服務器上抓取本地沒有的資料時,它并不會修改作業目錄中的資料,它只會獲取資料然后讓你自己合并,
  • git pull:在大多數情況下它的含義是一個 git fetch 緊接著一個 git merge / git rebase 命令

2.2 分支合并

分支合并主要有兩種方式:git merge / git rebase

2.2.1 git merge

git merge 會把兩個分支的最新快照以及二者最近的公共祖先進行三方合并,合并的結果是生成一個新的快照(并提交)

作業中的使用流程

現有主分支 master,開發某種功能的分支 dev,dev 上面的內容已經開發完成了,現在要將 dev 分支上的內容合并到 master

  1. git checkout master
  2. git pull(拉取最新代碼,也可以使用 git fetch)
  3. git merge dev
  4. ... (解決沖突)
  5. git push (提交到服務器)

2.2.2 git rebase

現在同樣有主分支 master 與 開發分支 dev,需要將 dev 合并到 master

git rebase 的原理是先找到兩個分支(master 與 dev)的最近公共祖先,然后對比 dev 分支對于該祖先的歷次提交,提取相應的修改并存為臨時檔案,然后將當前分支指向目標分支(master)的最新一次的提交,最后將之前另存為臨時檔案的修改依序應用

作業中的使用流程
  1. git checkout master(切換到目標分支)
  2. git pull (拉取最新代碼)(也可以直接執行 git rebase master dev,省去步驟3和步驟4 )
  3. git checkout dev (切換到開發分支)
  4. git rebase master (執行變基操作)
  5. git checkout master (切換到主分支)
  6. git merge dev (將 dev 分支上的修改變基到主分支)
  7. git push (提交到服務器)
變基操作前的分支圖
變基完成后的分支圖

無論是 rebase 還是 merge ,整合的最終結果所指向的快照始終是一樣的,只不過提交的歷史不同罷了,變基是將一系列提交按照原有次序依次應用到另一分支上,而合并是把最終結果合在一起

3. 常用命令

3.1 匯總

git add -i:進入互動式終端模式,可以快速選擇某些檔案被暫存,達成部分提交的目的,另外該模式下還有多種快捷功能,

git commit --amend:修改最近一次提交的提交資訊

git rebase -i:互動式的運行變基,修改多個提交資訊(注意無論是 git commit --amend 還是 git rebase -i 都不能涉及到已經推送到服務器的提交)

git revert:撤銷(還原)某次提交

3.2 git reset 的不同模式

3.2.1 git reset --soft HEAD~

首先要明白 git 的 “三棵樹”,HEAD、Index 以及 Working Directory,HEAD 是指已經 commit 快照,可以將它看做是 該分支上的最后一次提交;Index 是 “暫存區”,是預期的下一次提交;Working Directory 是我們自己的作業目錄,我們在作業目錄中對檔案進行修改,然后添加到暫存區,最后再 commit,HEAD 指向我們最后一次的 commit,

我們運行 git reset --soft HEAD~ 會產生什么效果?下圖是我們現在的分支狀態和 “三棵樹” 的狀態

然后我們運行 git reset --soft HEAD~

可以看到,Index 區和 Working Directory 區的狀態并沒有發生變化,只有 HEAD 指標向前移動了一個節點,git reset --soft HEAD~ 的本質上是撤銷了上一次 git commit 命令,當我們運行 git commit 時,Git 會創建一個新的提交,并移動 HEAD 所指向的分支來使其指向該提交,當將它 reset 回 HEAD~(HEAD 的父結點)時,其實就是把該分支移動回原來的位置,而不會改變 Index 和 Work Directory,現在可以再次運行 git commit 以達到和 git commit --amend 相同的效果,

3.2.2 git reset [--mixed] HEAD~

mixed 是 git reset 操作的默認引數,git reset --mixed HEAD~ 可以重置 Index (暫存區)的檔案與上次的 commit 保持一致,Work Directory 的內容保持不變,

當我們運行 git reset --mixed HEAD~ 時,reset 會用 HEAD 指向的當前快照的內容來更新索引

git reset --mixed HEAD~ 操作共有兩個步驟

  1. 將 HEAD 指標向前移動一個節點,也就是 git reset --soft HEAD~ 操作

  2. 重置 Index (暫存區)的檔案與 HEAD 指向的節點保持一致

3.2.3 git reset --hard HEAD~

--hard 是 reset 命令唯一的危險用法,git reset --hard HEAD~ 命令會撤銷最后的提交、git add 和 git commit 命令以及 Work Directory 中所有的作業

git reset --hard HEAD~ 總共有三個步驟

  1. 將 HEAD 指標向前移一個節點,也就是 git reset --soft HEAD~ 操作
  2. 重置 Index (暫存區)的檔案與 HEAD 指向的節點保持一致,也就是 git reset --mixed HEAD~ 操作
  3. 重置 Work Directory 的檔案與 HEAD 和 Index 保持一致

3.2.4 git reset 的其他用法

git reset file.txt(其實是 git reset --mixed HEAD file.txt 的簡寫形式),它的實質是將 file.txt 從 HEAD 復制到 Index ,該命令總共有兩個步驟:

  1. 移動 HEAD 分支的指向(因為我們給 reset 指定了一個路徑,所以它的作用范圍限定為指定的檔案或檔案集合,而 HEAD 只是一個指標,無法讓它指向兩個提交中各自的一部分,所以該步驟會跳過,HEAD 的指向不變)
  2. 讓 Index 看起來像 HEAD

因為 git reset file.txt 會產生 Index 與 HEAD 中 file.txt 檔案一模一樣的結果,所以 file.txt 會從 Index (暫存區)被移除,git reset file.txt 與 git add file.txt 所做的事正好相反,所以我們可以使用 git reset file_name 來取消暫存一個檔案,

我們也可以通過指標一個具體的提交來拉取對應的檔案版本,類似于 git reset eb43bf file.txt,這時候再運行 git commit,就會將該版本的 file.txt 提交,

另外,可以使用 git reset --soft HEAD~n 來達到壓縮提交的效果

3.3 git checkout

git checkout [branch]:切換分支,與 git reset --hard [branch] 非常相似,它會更新 “三棵樹”,HEAD、Index、WorkDirectory,不同于 reset --hard,checkout 對于作業目錄是安全的,它會通過檢查來確保不會將已更改的檔案弄丟,并且 reset 會移動 HEAD 分支的走向,而 checkout 只會移動 HEAD 自身來指向另一個分支

git checkout file.txt:它就像 git reset [branch] file 那樣用那次提交中的那個檔案來更新 Index,同時也會覆寫作業目錄中對應的檔案,并不會移動 HEAD

4. git 底層命令

4.1 .git 目錄

  • config: 專案特有的配置選項
  • info: 包含一個全域性排除檔案,用以放置哪些不希望被記錄在 .gitignore 檔案中的忽略模式
  • hooks: 包含客戶端或服務端的鉤子腳本
  • objects: 存盤所有的資料內容
  • refs: 存盤指向資料(分支、遠程倉庫和標簽等)的提交物件的指標
  • HEAD: 指向目前被檢出的分支
  • index: 保存暫存區資訊

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/509055.html

標籤:其他

上一篇:Github-CLI

下一篇:Springboot集成Swagger

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more