自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 Git,要常備后悔藥

開發(fā) 前端
使用Git的過程,難免由于手快或者別的什么原因,需要對(duì)做過的事情進(jìn)行“反悔”或者多次“反悔”。不用擔(dān)心,Git強(qiáng)大到幾乎任何操作都是可以“反悔”的,讓我們一起來看看吧。

Git是目前世界上最優(yōu)秀最流行的分布式版本控制系統(tǒng),也是程序員們?nèi)粘J褂米铑l繁的工具之一(幾乎每天都需要使用它來對(duì)源代碼進(jìn)行版本管理)。

使用Git的過程,難免由于手快或者別的什么原因,需要對(duì)做過的事情進(jìn)行“反悔”或者多次“反悔”。不用擔(dān)心,Git強(qiáng)大到幾乎任何操作都是可以“反悔”的,讓我們一起來看看吧。

1.在未暫存前,撤銷本地修改

在介紹Git“反悔”操作之前,先簡(jiǎn)單提及下Git的一些基礎(chǔ)知識(shí)。

Git項(xiàng)目有3個(gè)區(qū)域:工作區(qū)、暫存區(qū)和Git倉庫(分成本地倉庫和遠(yuǎn)程倉庫)。如下圖:

 

使用 Git,要常備后悔藥

本地編寫的代碼,不執(zhí)行任何git命令,處于工作區(qū)。

執(zhí)行g(shù)it add命令時(shí),會(huì)將工作區(qū)的文件標(biāo)記為已暫存,保存在暫存區(qū)。

執(zhí)行g(shù)it commit命令時(shí),會(huì)將標(biāo)記為已暫存的文件保存都本地Git倉庫,并生成一個(gè)快照。

在沒有暫存之前(沒有執(zhí)行g(shù)it add命令),我們可以通過以下命令查看本地修改:

  1. git diff 

顯示的格式如下圖所示:

 

使用 Git,要常備后悔藥

如果我們不想要這些代碼本地代碼(比如一些臨時(shí)的測(cè)試代碼),可以通過以下命令一次性撤銷所有本地修改:

  1. git checkout -- . 

注意:該命令不可二次“反悔”,本地操作一旦撤銷,將無法通過Git找回。

撤銷之后再次執(zhí)行g(shù)it diff命令將沒有任何輸出,代表沒有文件在暫存區(qū)。

我們也可以指定具體的文件路徑,撤銷該文件的修改:

  1. git checkout -- [filename] 

2.在暫存之后,撤銷暫存區(qū)的修改

本地寫完代碼,提交到本地倉庫之前,需要先將修改的文件添加到暫存區(qū),執(zhí)行以下命令將本地所有已修改的文件添加到暫存區(qū)(當(dāng)然也可以指定具體的文件):

  1. git add . 

此時(shí)我們執(zhí)行g(shù)it diff命令,將不會(huì)有任何輸出(因?yàn)槲募驯惶砑拥綍捍鎱^(qū)),想要查看暫存區(qū)的修改,可以執(zhí)行以下命令:

  1. git diff --staged 

看到的效果和之前為暫存前,通過git diff看到的一模一樣。

如果這時(shí)我們想要一次性撤銷暫存區(qū)的全部修改,可以執(zhí)行以下命令(當(dāng)然也可以撤銷暫存區(qū)指定文件的修改):

  1. git reset . 

 

使用 Git,要常備后悔藥

注意:

該命令可以二次“反悔”,通過git add .命令可以將文件再一次添加到暫存區(qū)。

這里的“撤銷暫存區(qū)的修改”是指撤銷git add .這個(gè)命令,回到執(zhí)行g(shù)it add .之前的狀態(tài),即已修改為暫存狀態(tài)。

此時(shí),如果執(zhí)行g(shù)it diff --staged命令,將沒有任何輸出,執(zhí)行g(shù)it diff命名將看到已修改未暫存狀態(tài)的輸出。

1和2的兩個(gè)命令可以合并成一個(gè):

  1. git reset --hard<=>git reset .git checkout -- 

即:如果已暫存,但未提交本地倉庫之前,想把所有文件直接拋棄(而不是從暫存區(qū)刪除),可以直接執(zhí)行以上命令。

3.提交到本地倉庫之后(但未推送到遠(yuǎn)程倉庫),撤銷本次提交

執(zhí)行以下命令,可以將暫存區(qū)的所有文件保存到本地Git倉庫,并生成文件快照(便于之前的回退等操作):

  1. git commit -m "modify some files" 

此時(shí)提交歷史里面會(huì)有一條記錄f8651ff(Commit ID):

 

使用 Git,要常備后悔藥

如果我們不想要這次修改的內(nèi)容,有以下2種方法:

方法一

回到當(dāng)前提交的父對(duì)象a18c6fa(即上一次提交,通過git log查看),就等于撤銷了本次提交:

  1. git checkout a18c6fa 

 

使用 Git,要常備后悔藥

執(zhí)行g(shù)it log命令,發(fā)現(xiàn)已經(jīng)回到之前的提交:

 

使用 Git,要常備后悔藥

方法二

重置之前的提交

  1. git diff 

 

使用 Git,要常備后悔藥

效果和方法一一樣:

 

使用 Git,要常備后悔藥

注意:該命令是可以二次“反悔”的,具體步驟如下:

  1. git checkout -- . 

 

使用 Git,要常備后悔藥

4.修改提交

考慮以下場(chǎng)景:

原本打算修改兩個(gè)文件,結(jié)果只提交了一個(gè)文件,但又不想生成兩個(gè)提交記錄(Commit ID),具體執(zhí)行的命令如下:

  1. git add src/app/app.component.html 
  2. git commit -m "add test block" 
  3. git log 

 

使用 Git,要常備后悔藥

這樣其實(shí)只提交了app.component.html一個(gè)文件,不是我們想要的。

可以通過以下命令“反悔”(添加遺漏文件,又不重新生成新的Commit ID):

  1. git add src/app/app.component.css 
  2. git commit --amend 

 

使用 Git,要常備后悔藥

還有一種場(chǎng)景可能更加常見,沒有遺漏的文件,只是提交信息里有一個(gè)單詞寫錯(cuò)了,可以使用以下命令進(jìn)行修補(bǔ):

  1. git commit --amend -m "add test container" 

注意:--amend修補(bǔ)參數(shù)會(huì)將改變之前的Commit ID,但不會(huì)生成新的Commit ID。

5.撤銷提交歷史中的某一次指定的提交

第3小結(jié)提到回退最近一次提交的方法(使用git reset命令),該方法只能針對(duì)連續(xù)的提交,如果只想撤銷提交歷史中的某一次提交(比如:),該怎么辦呢?

比如:Commit ID為711bb0b的提交,該次提交將標(biāo)簽的target屬性由"_blank"改成了"_self"。

 

使用 Git,要常備后悔藥

可以使用以下命令撤銷該次提交(將提交的內(nèi)容“反操作”),并生成一個(gè)新的提交在最前面:

  1. git checkout -- [filename] 

 

使用 Git,要常備后悔藥

revert之后,會(huì)在提交歷史的最前面生成一個(gè)新的Commit ID(1f49a42),該次提交將標(biāo)簽的target屬性由"_self"改回了"_blank"。

 

使用 Git,要常備后悔藥

6.合并出現(xiàn)沖突時(shí),撤銷合并操作

兩個(gè)分支改了同一個(gè)文件的同一個(gè)地方,合并時(shí)將出現(xiàn)沖突:

 

使用 Git,要常備后悔藥

 

使用 Git,要常備后悔藥

如果不想解決沖突,想撤銷這個(gè)合并,可以使用以下命令:

  1. git add . 

abort之后,將恢復(fù)合并之前的狀態(tài)。

7.暫存區(qū)的文件加多了,想移除,又不想刪掉本地的文件

  1. git diff --staged 

8.分支重命名

  1. git br -m [old_br] [new_br] 

9.撤銷變基操作

將 rebase_test 分支的修改變基到master上:

  1. git co rebase_test 
  2. git rebase master 

 

使用 Git,要常備后悔藥

撤銷的步驟如下:

  1. 使用 git reflog 命令找到變基前的提交 09b0adc 
  2. 使用 git reset --hard 09b0adc 重置到該提交 

 

使用 Git,要常備后悔藥

10.以腳本方式改寫提交

考慮以下場(chǎng)景,在一次很早的提交中,將一個(gè)儲(chǔ)存密碼的文件passwords.txt提交到了遠(yuǎn)程倉庫,這時(shí)如果只是從遠(yuǎn)程倉庫中刪除該文件,別人依然可以通過提交歷史找到這個(gè)文件。

因此我們需要從每一個(gè)快照中移除該密碼文件,用以下命令就可以做到:

  1. git filter-branch --tree-filter 'rm -f passwords.txt' HEAD 

該命令執(zhí)行完會(huì)將提交歷史中所有提交的passwords.txt文件徹底刪除,永遠(yuǎn)沒法通過Git找回。

除了以上“反悔”操作,還有一個(gè)很強(qiáng)大的命令,也可以以某種形式對(duì)過去做過的事情進(jìn)行“反悔”,那就是交互式變基:

  1. git rebase -i 

 

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

2014-02-09 09:47:44

Windows 8.1Windows 8.1

2020-11-02 08:21:50

Git辦法代碼

2017-02-06 19:17:28

云主機(jī)IT運(yùn)維磁盤

2016-10-24 22:41:06

大數(shù)據(jù)Google

2020-04-27 09:21:25

Android谷歌功能

2017-08-21 15:54:47

IOS越獄工具

2022-01-19 18:02:42

chrome插件使用者

2015-07-20 11:47:46

Windows 10升級(jí)

2015-01-12 11:07:22

2019-01-02 08:17:20

微信功能系統(tǒng)

2019-01-18 09:20:40

蘋果WiFi路由器

2021-03-19 08:16:03

數(shù)據(jù)庫

2012-01-04 10:50:41

金山快盤文件存錯(cuò)

2021-06-10 14:22:57

iOS 15iOS 14降級(jí)

2011-05-29 15:28:30

文件恢復(fù)360

2021-05-22 06:42:34

Windows10操作系統(tǒng)微軟

2020-09-08 11:54:11

戴爾

2013-11-08 15:40:44

IE11Windows 7

2021-02-19 09:01:37

Go項(xiàng)目模塊

2025-04-21 00:00:00

點(diǎn)贊
收藏

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