成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Git的4個階段的撤銷更改命令分析

移動開發(fā)
雖然 git 誕生距今已有 12 年之久,網(wǎng)上各種關(guān)于 git 的介紹文章數(shù)不勝數(shù),但是依然有很多人(包括我自己在內(nèi))對于它的功能不能完全掌握。以下的介紹只是基于我個人對于 git 的理解,并且可能生編硬造了一些不完全符合 git 說法的詞語。目的只是為了讓 git 通俗化,使初學(xué)者也能大概了解如何快速上手 git 。

雖然 git 誕生距今已有 12 年之久,網(wǎng)上各種關(guān)于 git 的介紹文章數(shù)不勝數(shù),但是依然有很多人(包括我自己在內(nèi))對于它的功能不能完全掌握。以下的介紹只是基于我個人對于 git 的理解,并且可能生編硬造了一些不完全符合 git 說法的詞語。目的只是為了讓 git 通俗化,使初學(xué)者也能大概了解如何快速上手 git 。同時,下面所有討論,我們都假設(shè)只使用一個分支,也就是主分支 master 的情況,雖然這種作法并不符合 git 規(guī)范,但是現(xiàn)實情況中絕大部分用戶是直接在 master 分支上進行工作的,所以在這里我們不去引入更加復(fù)雜的各種分支的情況,也不涉及標(biāo)簽 tag 的操作,只講在最簡單的主分支上如何回退。

基本概念

3個步驟

Git的4個階段的撤銷更改命令分析

正常情況下,我們的工作流就是 3 個步驟,對應(yīng)上圖中的 3 個箭頭線:

 

  1. git add . 
  2. git commit -m "comment" 
  3. git push 
  • git add . 把所有文件放入 暫存區(qū) ;
  • git commit 把所有文件從 暫存區(qū) 提交進 本地倉庫 ;
  • git push 把所有文件從 本地倉庫 推送進 遠程倉庫 。

4個區(qū)

git 之所以令人費解,主要是它相比于 svn 等等傳統(tǒng)的版本管理工具,多引入了一個 暫存區(qū) ( Stage )的概念,就因為多了這一個概念,而使很多人疑惑。其實,在初學(xué)者來說,每個區(qū)具體怎么工作的,我們完全不需要關(guān)心,而只要知道有這么 4 個區(qū)就夠了:

  • 工作區(qū)( Working Area )
  • 暫存區(qū)( Stage )
  • 本地倉庫( Local Repository )
  • 遠程倉庫( Remote Repository )

5種狀態(tài)

以上 4 個區(qū),進入每一個區(qū)成功之后會產(chǎn)生一個狀態(tài),再加上最初始的一個狀態(tài),一共是 5 種狀態(tài)。以下我們把這 5 種狀態(tài)分別命名為:

  • 未修改( Origin )
  • 已修改( Modified )
  • 已暫存( Staged )
  • 已提交( Committed )
  • 已推送( Pushed )

檢查修改

了解了基本概念之后,我們來談一談犯錯誤之后如何撤銷的問題。首先,我們要了解如何檢查這 3 個步驟當(dāng)中每一個步驟修改了什么,然后才好判斷有沒有修改成功。檢查修改的二級命令都相同,都是 diff ,只是參數(shù)有所不同。

已修改,未暫存

  1. git diff 

首先,我們來看一下,如果我們只是簡單地在瀏覽器里保存了一下文件,但是還沒有做 git add . 之前,我們?nèi)绾螜z查有哪些修改。我們先隨便拿一個文件來做一下實驗:

Git的4個階段的撤銷更改命令分析

我們在文件開頭的第 2 行胡亂加了 4 個數(shù)字 1234 ,存盤,這時文件進入了 已修改 狀態(tài),但是還沒有進入 暫存區(qū) ,我們運行 git diff ,結(jié)果如下:

 

  1. diff --git a/index.md b/index.md 
  2. index 73ff1ba..1066758 100644 
  3. --- a/index.md 
  4. +++ b/index.md 
  5. @@ -1,5 +1,5 @@ 
  6.  --- 
  7. -layout: main 
  8. +1234layout: main 
  9.  color: black 
  10.  --- 

git diff 的結(jié)果告訴我們哪些文件已經(jīng)做了哪些修改。

已暫存,未提交

  1. git diff --cached 

現(xiàn)在我們把修改放入 暫存區(qū) 看一下。先執(zhí)行 git add . ,然后執(zhí)行 git diff ,你會發(fā)現(xiàn)沒有任何結(jié)果:

Git的4個階段的撤銷更改命令分析

這說明 git diff 這個命令只檢查我們的 工作區(qū) 和 暫存區(qū) 之間的差異,如果我們想看到 暫存區(qū) 和 本地倉庫 之間的差異,就需要加一個參數(shù) git diff --cached :

 

  1. diff --git a/index.md b/index.md 
  2. index 73ff1ba..1066758 100644 
  3. --- a/index.md 
  4. +++ b/index.md 
  5. @@ -1,5 +1,5 @@ 
  6.  --- 
  7. -layout: main 
  8. +1234layout: main 
  9.  color: black 
  10.  --- 

這時候我們看到的差異是 暫存區(qū) 和 本地倉庫 之間的差異。

已提交,未推送

  1. git diff master origin/master 

現(xiàn)在,我們把修改從 暫存區(qū) 提交到 本地倉庫 ,再看一下差異。先執(zhí)行 git commit ,然后再執(zhí)行 git diff --cached ,沒有差異,執(zhí)行 git diff master origin/master ,可以看到差異:

Git的4個階段的撤銷更改命令分析

在這里, master 就是你的 本地倉庫 ,而 origin/master 就是你的 遠程倉庫 , master 是主分支的意思,因為我們都在主分支上工作,所以這里兩邊都是 master ,而 origin 就代表遠程。

撤銷修改

了解清楚如何檢查各種修改之后,我們開始嘗試各種撤銷操作。

已修改,未暫存

如果我們只是在編輯器里修改了文件,但還沒有執(zhí)行 git add . ,這時候我們的文件還在 工作區(qū) ,并沒有進入 暫存區(qū) ,我們可以用:

  1. git checkout . 

或者

  1. git reset --hard 

來進行撤銷操作。

Git的4個階段的撤銷更改命令分析

可以看到,在執(zhí)行完 git checkout . 之后,修改已被撤銷, git diff 沒有任何內(nèi)容了。

一對反義詞

git add . 的反義詞是 git checkout . 。做完修改之后,如果你想向前走一步,讓修改進入 暫存區(qū) ,就執(zhí)行 git add . ,如果你想向后退一步,撤銷剛才的修改,就執(zhí)行 git checkout . 。

已暫存,未提交

你已經(jīng)執(zhí)行了 git add . ,但還沒有執(zhí)行 git commit -m "comment" 。這時候你意識到了錯誤,想要撤銷,你可以執(zhí)行:

 

  1. git reset  
  2. git checkout . 

或者

  1. git reset --hard 

git reset 只是把修改退回到了 git add . 之前的狀態(tài),也就是說文件本身還處于 已修改未暫存 狀態(tài),你如果想退回 未修改 狀態(tài),還需要執(zhí)行 git checkout . 。

或許你已經(jīng)注意到了,以上兩個步驟都可以用同一個命令 git reset --hard 來完成。是的,就是這個強大的命令,可以一步到位地把你的修改完全恢復(fù)到 未修改 的狀態(tài)。

已提交,未推送

你的手太快,你既執(zhí)行了 git add . ,又執(zhí)行了 git commit ,這時候你的代碼已經(jīng)進入了你的 本地倉庫 ,然而你后悔了,怎么辦?不要著急,還有辦法。

  1. git reset --hard origin/master 

還是這個 git reset --hard 命令,只不過這次多了一個參數(shù) origin/master ,正如我們上面講過的, origin/master 代表 遠程倉庫 ,既然你已經(jīng)污染了你的 本地倉庫 ,那么就從 遠程倉庫 把代碼取回來吧。

已推送

很不幸,你的手實在是太快了,你既 git add 了,又 git commit 了,并且還 git push 了,這時你的代碼已經(jīng)進入 遠程倉庫 。如果你想恢復(fù)的話,還好,由于你的 本地倉庫 和 遠程倉庫 是等價的,你只需要先恢復(fù) 本地倉庫 ,再強制 push 到 遠程倉庫 就好了:

 

  1. git reset --hard HEAD^  
  2. git push -f 

 

Git的4個階段的撤銷更改命令分析

總結(jié)

以上 4 種狀態(tài)的撤銷我們都用到了同一個命令 git reset --hard ,前 2 種狀態(tài)的用法甚至完全一樣,所以只要掌握了 git reset --hard 這個命令的用法,從此你再也不用擔(dān)心提交錯誤了。

責(zé)任編輯:未麗燕 來源: SegmentFault
相關(guān)推薦

2015-06-24 09:54:38

Git撤銷

2019-08-12 07:08:12

區(qū)塊鏈去中心化分布式網(wǎng)絡(luò)

2021-01-12 21:20:38

物聯(lián)網(wǎng)架構(gòu)物聯(lián)網(wǎng)IOT

2020-05-07 18:20:52

Git腳本Linux開源

2022-03-17 13:44:30

Git命令管理

2013-08-23 09:28:37

GitGit 命令

2016-12-02 20:22:34

OS

2023-08-31 22:45:15

Git命令效率

2022-10-27 09:34:06

git撤銷

2019-03-28 14:30:21

代碼開發(fā)命令

2020-05-15 10:28:04

實時分析客戶需求CIO

2020-11-05 11:50:48

Git命令Linux

2010-07-20 14:50:05

telnet端口

2024-12-19 08:17:16

2023-11-14 14:21:43

Git三路合并

2023-10-12 18:00:34

Git系統(tǒng)命令

2009-12-29 10:43:31

PPPOE協(xié)議

2018-11-08 15:12:16

數(shù)據(jù)分析算法決策樹

2012-05-22 00:28:21

JavaJava開源開源工具

2018-08-06 08:51:32

Linux命令cut
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美黑人巨大videos精品 | 中国av在线免费观看 | av在线免费观看不卡 | 91中文字幕在线观看 | 日日夜夜精品免费视频 | 91视频麻豆 | 日韩欧美大片 | 九九成人 | 中文字幕第三页 | www.国产精| 九色91视频 | 免费在线视频一区二区 | 国产精品一区二区三区免费观看 | 免费在线观看一区二区 | 九九热在线视频 | 成人在线视频观看 | 狠狠干夜夜草 | 亚洲淫视频 | 九九天堂网 | 99热这里有精品 | 成人伊人 | 综合久| 日本在线视 | 91一区二区三区在线观看 | 黄色视频a级毛片 | 久久久精品影院 | 亚洲最大av网站 | a级片在线观看 | 日韩视频中文字幕 | 久久久一区二区三区四区 | 91精品国产91久久久久久最新 | 日本黄色免费视频 | 亚洲a在线观看 | 久久婷婷麻豆国产91天堂 | 精品1区 | 日韩午夜一区二区三区 | 九九视频在线观看视频6 | 中文字幕在线剧情 | 7799精品视频天天看 | 成人a视频 | 国产视频中文字幕 |