Git由淺入深之操作與指令

來源:Git由淺入深之操作與指令
作者:驚鴻三世(轉(zhuǎn)載已獲得原作者許可,如需轉(zhuǎn)載請與原作者聯(lián)系)

本篇正式開始介紹Git的基礎(chǔ)操作與原理,看完本篇,你應(yīng)該知道如何使用Git進行一次基礎(chǔ)的版本控制,包括:Git倉庫的生成和獲取,添加和忽略版本控制對象;暫存,查看,緩存,變更;查看和查找提交歷史;格式化歷史記錄輸出;刪除和移動Git倉庫內(nèi)對象。

獲取Git倉庫(Git repository)

使用Git的第一步是要獲取一個Git倉庫,我們使用Git的操作對象都是存放在Git倉庫里,獲取Git倉庫的方式有兩種:

  • 導(dǎo)入一個項目或目錄到Git,初始化(init)生成Git倉庫;
  • 從遠程服務(wù)器克隆(clone)一個Git倉庫。

初始化倉庫(init)

若我們需要使用一個項目或目錄生成一個Git倉庫,只需要通過命令行進入該目錄,執(zhí)行如下Git指令:

git init

此操作將在此目錄生成一個.git子目錄,該目錄包含整個倉庫結(jié)構(gòu),即倉庫的所有文件;同時會檢出(checkout)一個默認工作分支,通常名為master。

此時,我們只是初始化生成了一個Git倉庫,還未添加需要進行版本控制的對象–文件或目錄。

克隆倉庫(clone)

很多時候,我們需要從遠程服務(wù)器獲取一個已存在的Git倉庫,我們只需要使用如下指令:

git clone https://github.com/codingplayboy/javascript_notes

git clone后面跟著的url就是已存在的Git倉庫地址,我們需要知道的是Git克隆是對服務(wù)器上倉庫的一次近乎完整的數(shù)據(jù)拷貝,當(dāng)前倉庫項目的所有文件及其各版本歷史都會被獲取。

執(zhí)行如上指令后,會在當(dāng)前目錄創(chuàng)建一個javascript_notes目錄并在javascript_notes中初始化一個.git子目錄,拉取倉庫的所有數(shù)據(jù),然后根據(jù)倉庫(或項目)的最新版本檢出(check out)一個工作分支,通常該分支默認名稱為master。

倉庫別名

我們克隆一個Git倉庫時,其默認名還是倉庫名,但是也支持我們自定義本地別名:

git clone https://github.com/codingplayboy/javascript_notes js_notes

執(zhí)行如上指令,會克隆一個倉庫,并導(dǎo)入到當(dāng)前目錄下的js_notes目錄。

倉庫Url

Git倉庫Url支持的協(xié)議有很多,最常見的是https://git@;還有使用SSH傳輸協(xié)議的,形如git://或者user@server:path/xxx/repository.git

版本控制對象

在上節(jié),我們已經(jīng)知道如何獲取一個Git倉庫,但是到目前為止也僅僅是存在一個倉庫,我們進行版本控制的對象(文件或目錄)并沒有添加進倉庫。

工作目錄及其內(nèi)對象的狀態(tài)

相關(guān)指令:git status

當(dāng)我們獲取一個倉庫,如克隆一個遠端倉庫后,在倉庫目錄執(zhí)行上面指令,如圖所示:

  • 圖中第一行on branch master 告訴我們當(dāng)前我們處在名為master的分支;
  • 第二行up-to-date with 'origin/master' 說明目前分支與遠程倉庫的master分支保持同步最新版本;
  • 第三行working directory clean 說明目前倉庫中沒有新加或修改過的對象(文件或目錄)。

關(guān)于控制對象的狀態(tài)(git status)

在當(dāng)前工作目錄的文件或目錄,可能出于兩種狀態(tài):

  • 已標(biāo)記(tracked)

所謂已標(biāo)記文件或目錄,即那些在Git最新快照里存在的對象,可能是未修改(unmodified),已修改(modified)或暫存(staged)的文件或目錄。

  • 未標(biāo)記(untracked)

未標(biāo)記對象,即除去已標(biāo)記對象外,所有對象,比如在工作目錄下但是未包含在最新快照里并且不在暫存區(qū)(staging area)。

可以想象一下,當(dāng)?shù)谝淮慰寺∫粋€遠程倉庫后,倉庫下的所有文件都應(yīng)該是處于已標(biāo)記(tracked)但是未修改的狀態(tài)。

添加對象(git add)

添加版本控制對象的指令是git add,比如,我們可以使用如下指令添加一個README.txt文件,當(dāng)然我們首先需要在倉庫目錄下,創(chuàng)建該文件(任意方式創(chuàng)建),查看狀態(tài):

如上圖,顯示README.txt文件為Untracked file,并且提示:use git add to track;

然后使用git add指令后:

git add README.txt

再次執(zhí)行g(shù)it status指令:

如上,出現(xiàn):Changes to be committed,說明該文件已被標(biāo)記(tracked)且被暫存,我們可以進行提交了。

當(dāng)然該指令還可以對目錄使用:

git add test/

如上指令,將添加該test目錄及其內(nèi)所有文件或子目錄。

最后,也許我們希望一次添加所有變更,而不是一個一個添加,如下指令,可以實現(xiàn):

git add .

我們還需要關(guān)注git add指令,不只是能添加版本控制對象,還有以下功能:

  • 暫存變更(staged)
  • 標(biāo)記沖突已解決(resolved)

git add指令,更貼切的作用應(yīng)該是添加新內(nèi)容(文件/目錄/變更)到下一次提交,即將新內(nèi)容加入最新快照,等待提交;
關(guān)于后兩點功能,后文有詳細介紹。

忽略對象(.gitignore)

有時候,我們并不希望對倉庫內(nèi)所有對象(文件或目錄)進行管理,某些開發(fā)依賴或本地調(diào)試使用文件和目錄,我們不需要在團隊間共享,這些文件應(yīng)該被Git忽略,我們只需要創(chuàng)建一個.gitignore文件,在此文件中列出希望被忽略的文件或目錄,如:

.gitignore文件語法主要如下:

  • 以行為單位,一行匹配一個條件
  • 空行或以#開頭的行會被忽略
  • 表達式支持glob格式
  • 排除某表達式匹配項在該表達式前加!;

暫存變更(git add)

在添加README.txt文件后,我們可以對其進行修改,如在該文件加入一行文字http://blog.codingplayboy.com,然后執(zhí)行git status指令,結(jié)果如下:

發(fā)現(xiàn),除了之前新添加文件的記錄,又多了一條記錄:Changes not staged for commit,表明已標(biāo)記對象發(fā)生變更但是未被暫存,其下面第一第二行是輔助信息,第三行告訴我們,README.txt已經(jīng)修改(modified)

隨后我們可以使用git add指令暫存此次變更,此時,再執(zhí)行g(shù)it status指令,可以看到:

所有變更都已暫存,等待下一次提交。

查看簡短狀態(tài)信息(git status -s)

上文已經(jīng)指出,使用git status可以查看當(dāng)前工作目錄完整的狀態(tài),同時,git還支持使用參數(shù)指明查看簡短狀態(tài)信息:

git status -s
or 
git status --short

如下,其信息比git status簡潔明了:


查看變更信息(git diff)

前文的git status可以查看當(dāng)前工作目錄的狀態(tài)信息,包括當(dāng)前分支,變更文件等,但都屬于文件層次的信息;

有時我們希望知道:

  • 哪些變更未被暫存;
  • 哪些變更已暫存,等待提交

git status顯然是不能告訴我們,因為這是屬于git diff的使命,如,在README.txt文件中內(nèi)容添加‘/’

如上圖,git diff以行為單位,告訴我們所有變更文件哪些行發(fā)生變更(增加或刪除)。

git diff比較當(dāng)前工作目錄和暫存區(qū)的內(nèi)容,然后展示哪些文件內(nèi)容發(fā)生變更并且尚未暫存;同時,其支持額外參數(shù)--staged(或–cached),該參數(shù)指定時,將輸出上次提交內(nèi)容與暫存區(qū)內(nèi)容比較后的的變更。簡言之,git diff輸出未暫存的變更,git diff --staged輸出已暫存待提交的變更。

在使用git add .暫存變更后,使用git diff指令是沒用的,而使用git diff --staged指令,輸出如下:

提交變更(git commit)

所有的變更,最終都需要提交,才能在本地持久化報存,在將所有變更暫存(git add)后,我們就可以進行提交了,相關(guān)指令就是:

git commit

在輸入如上指令后,將進入Git commit信息編輯狀態(tài):

我們可以編輯本次提交的備注信息,其中的默認備注信息都以#開頭,表明提交時會被忽略。

git commit指令告訴Git持久化記錄(提交)我們暫存區(qū)(staging area)中的快照,任何未被暫存的變更,不會被添加進暫存區(qū)的快照,仍然保留在當(dāng)前工作目錄,我們可以隨后提交。

更詳細的提交信息(git commit -v)

除了使用默認的git commit指令,我們還可以添加-v參數(shù),在提交信息中顯示變更內(nèi)容,如下:

如上圖,和之前的比較,除了基本的提示,還有文件變更內(nèi)容提示,可以避免某些誤提交。

行內(nèi)輸入提交信息(git commit -m)

當(dāng)然,Git還支持我們使用-m參數(shù),指明我們在使用git commit指令時直接填寫提交備注信息:

跳過暫存區(qū)(git commit -a)

我們知道對于發(fā)生變更的對象,我們需要先使用git add,暫存變更,再使用git commit提交變更;

但是還有一種可以不使用git add指令的方式,可以提交變更,就是給git commit指令添加-a參數(shù):

git commit -a

但是需要注意的是,該參數(shù),只能直接提交工作目錄中已標(biāo)記的對象(文件或目錄)的變更,對于未標(biāo)記,如新添加的對象,是無效的。

查看提交歷史(Git log)

本節(jié)要介紹的是如何查看之前的提交歷史及信息,你應(yīng)該知道的git log指令,默認地,不帶參數(shù)時,執(zhí)行g(shù)it log指令,輸出的是當(dāng)前倉庫按逆序排序(最近提交在最前)的提交記錄:

如上圖,每個提交記錄包含其SHA-1校驗和,提交者用戶名,提交日期,提交備注信息。

git log指令支持指定許多參數(shù),以過濾輸出不同提交記錄,下文展開介紹。

指定查看提交記錄數(shù)(git log -2)

Git支持我們指定數(shù)量參數(shù),限定該次查看提交記錄數(shù)量,如git log -2,之后輸出最近的兩條提交記錄。

格式化輸出提交記錄(git log –pretty)

Git支持我們格式化輸出的提交記錄信息,使用–pretty參數(shù),其值主要有以下幾個:

  • oneline: 指定一行輸出一條提交記錄;
  • short: 指定按原格式輸出簡要信息;
  • full: 指定按原格式輸出信息;
  • fuller: 指定按原格式輸出更多信息;
  • format:””: 允許指定自定義輸出格式,如:
git log --pretty=format:"%h - %an, %ar : %s"

查看簡要提交變更(git log –stat)

git log --stat輸出如下:

除了輸出基礎(chǔ)提交信息,后面還輸出了本次提交的簡要變更信息:變更了多少文件,及每個文件變更的行數(shù),并在最后輸出總結(jié)數(shù)據(jù)。

查看詳細提交變更(git log -p)

相對于git log --stat輸出簡要提交變更信息,我們可以指定-p參數(shù):git log -p,輸出提交變更的詳細內(nèi)容,如:

更多參數(shù)說明

| 參數(shù) | 說明 |

來源:Git由淺入深之操作與指令
作者:驚鴻三世(轉(zhuǎn)載已獲得原作者許可,如需轉(zhuǎn)載請與原作者聯(lián)系)

本篇正式開始介紹Git的基礎(chǔ)操作與原理,看完本篇,你應(yīng)該知道如何使用Git進行一次基礎(chǔ)的版本控制,包括:Git倉庫的生成和獲取,添加和忽略版本控制對象;暫存,查看,緩存,變更;查看和查找提交歷史;格式化歷史記錄輸出;刪除和移動Git倉庫內(nèi)對象。

獲取Git倉庫(Git repository)

使用Git的第一步是要獲取一個Git倉庫,我們使用Git的操作對象都是存放在Git倉庫里,獲取Git倉庫的方式有兩種:

  • 導(dǎo)入一個項目或目錄到Git,初始化(init)生成Git倉庫;
  • 從遠程服務(wù)器克隆(clone)一個Git倉庫。

初始化倉庫(init)

若我們需要使用一個項目或目錄生成一個Git倉庫,只需要通過命令行進入該目錄,執(zhí)行如下Git指令:

git init

此操作將在此目錄生成一個.git子目錄,該目錄包含整個倉庫結(jié)構(gòu),即倉庫的所有文件;同時會檢出(checkout)一個默認工作分支,通常名為master。

此時,我們只是初始化生成了一個Git倉庫,還未添加需要進行版本控制的對象–文件或目錄。

克隆倉庫(clone)

很多時候,我們需要從遠程服務(wù)器獲取一個已存在的Git倉庫,我們只需要使用如下指令:

git clone https://github.com/codingplayboy/javascript_notes

git clone后面跟著的url就是已存在的Git倉庫地址,我們需要知道的是Git克隆是對服務(wù)器上倉庫的一次近乎完整的數(shù)據(jù)拷貝,當(dāng)前倉庫項目的所有文件及其各版本歷史都會被獲取。

執(zhí)行如上指令后,會在當(dāng)前目錄創(chuàng)建一個javascript_notes目錄并在javascript_notes中初始化一個.git子目錄,拉取倉庫的所有數(shù)據(jù),然后根據(jù)倉庫(或項目)的最新版本檢出(check out)一個工作分支,通常該分支默認名稱為master。

倉庫別名

我們克隆一個Git倉庫時,其默認名還是倉庫名,但是也支持我們自定義本地別名:

git clone https://github.com/codingplayboy/javascript_notes js_notes

執(zhí)行如上指令,會克隆一個倉庫,并導(dǎo)入到當(dāng)前目錄下的js_notes目錄。

倉庫Url

Git倉庫Url支持的協(xié)議有很多,最常見的是https://git@;還有使用SSH傳輸協(xié)議的,形如git://或者user@server:path/xxx/repository.git

版本控制對象

在上節(jié),我們已經(jīng)知道如何獲取一個Git倉庫,但是到目前為止也僅僅是存在一個倉庫,我們進行版本控制的對象(文件或目錄)并沒有添加進倉庫。

工作目錄及其內(nèi)對象的狀態(tài)

相關(guān)指令:git status

當(dāng)我們獲取一個倉庫,如克隆一個遠端倉庫后,在倉庫目錄執(zhí)行上面指令,如圖所示:

  • 圖中第一行on branch master 告訴我們當(dāng)前我們處在名為master的分支;
  • 第二行up-to-date with 'origin/master' 說明目前分支與遠程倉庫的master分支保持同步最新版本;
  • 第三行working directory clean 說明目前倉庫中沒有新加或修改過的對象(文件或目錄)。

關(guān)于控制對象的狀態(tài)(git status)

在當(dāng)前工作目錄的文件或目錄,可能出于兩種狀態(tài):

  • 已標(biāo)記(tracked)

所謂已標(biāo)記文件或目錄,即那些在Git最新快照里存在的對象,可能是未修改(unmodified),已修改(modified)或暫存(staged)的文件或目錄。

  • 未標(biāo)記(untracked)

未標(biāo)記對象,即除去已標(biāo)記對象外,所有對象,比如在工作目錄下但是未包含在最新快照里并且不在暫存區(qū)(staging area)。

可以想象一下,當(dāng)?shù)谝淮慰寺∫粋€遠程倉庫后,倉庫下的所有文件都應(yīng)該是處于已標(biāo)記(tracked)但是未修改的狀態(tài)。

添加對象(git add)

添加版本控制對象的指令是git add,比如,我們可以使用如下指令添加一個README.txt文件,當(dāng)然我們首先需要在倉庫目錄下,創(chuàng)建該文件(任意方式創(chuàng)建),查看狀態(tài):

如上圖,顯示README.txt文件為Untracked file,并且提示:use git add to track;

然后使用git add指令后:

git add README.txt

再次執(zhí)行g(shù)it status指令:

如上,出現(xiàn):Changes to be committed,說明該文件已被標(biāo)記(tracked)且被暫存,我們可以進行提交了。

當(dāng)然該指令還可以對目錄使用:

git add test/

如上指令,將添加該test目錄及其內(nèi)所有文件或子目錄。

最后,也許我們希望一次添加所有變更,而不是一個一個添加,如下指令,可以實現(xiàn):

git add .

我們還需要關(guān)注git add指令,不只是能添加版本控制對象,還有以下功能:

  • 暫存變更(staged)
  • 標(biāo)記沖突已解決(resolved)

git add指令,更貼切的作用應(yīng)該是添加新內(nèi)容(文件/目錄/變更)到下一次提交,即將新內(nèi)容加入最新快照,等待提交;
關(guān)于后兩點功能,后文有詳細介紹。

忽略對象(.gitignore)

有時候,我們并不希望對倉庫內(nèi)所有對象(文件或目錄)進行管理,某些開發(fā)依賴或本地調(diào)試使用文件和目錄,我們不需要在團隊間共享,這些文件應(yīng)該被Git忽略,我們只需要創(chuàng)建一個.gitignore文件,在此文件中列出希望被忽略的文件或目錄,如:

.gitignore文件語法主要如下:

  • 以行為單位,一行匹配一個條件
  • 空行或以#開頭的行會被忽略
  • 表達式支持glob格式
  • 排除某表達式匹配項在該表達式前加!;

暫存變更(git add)

在添加README.txt文件后,我們可以對其進行修改,如在該文件加入一行文字http://blog.codingplayboy.com,然后執(zhí)行git status指令,結(jié)果如下:

發(fā)現(xiàn),除了之前新添加文件的記錄,又多了一條記錄:Changes not staged for commit,表明已標(biāo)記對象發(fā)生變更但是未被暫存,其下面第一第二行是輔助信息,第三行告訴我們,README.txt已經(jīng)修改(modified)

隨后我們可以使用git add指令暫存此次變更,此時,再執(zhí)行g(shù)it status指令,可以看到:

所有變更都已暫存,等待下一次提交。

查看簡短狀態(tài)信息(git status -s)

上文已經(jīng)指出,使用git status可以查看當(dāng)前工作目錄完整的狀態(tài),同時,git還支持使用參數(shù)指明查看簡短狀態(tài)信息:

git status -s
or 
git status --short

如下,其信息比git status簡潔明了:


查看變更信息(git diff)

前文的git status可以查看當(dāng)前工作目錄的狀態(tài)信息,包括當(dāng)前分支,變更文件等,但都屬于文件層次的信息;

有時我們希望知道:

  • 哪些變更未被暫存;
  • 哪些變更已暫存,等待提交

git status顯然是不能告訴我們,因為這是屬于git diff的使命,如,在README.txt文件中內(nèi)容添加‘/’

如上圖,git diff以行為單位,告訴我們所有變更文件哪些行發(fā)生變更(增加或刪除)。

git diff比較當(dāng)前工作目錄和暫存區(qū)的內(nèi)容,然后展示哪些文件內(nèi)容發(fā)生變更并且尚未暫存;同時,其支持額外參數(shù)--staged(或–cached),該參數(shù)指定時,將輸出上次提交內(nèi)容與暫存區(qū)內(nèi)容比較后的的變更。簡言之,git diff輸出未暫存的變更,git diff --staged輸出已暫存待提交的變更。

在使用git add .暫存變更后,使用git diff指令是沒用的,而使用git diff --staged指令,輸出如下:

提交變更(git commit)

所有的變更,最終都需要提交,才能在本地持久化報存,在將所有變更暫存(git add)后,我們就可以進行提交了,相關(guān)指令就是:

git commit

在輸入如上指令后,將進入Git commit信息編輯狀態(tài):

我們可以編輯本次提交的備注信息,其中的默認備注信息都以#開頭,表明提交時會被忽略。

git commit指令告訴Git持久化記錄(提交)我們暫存區(qū)(staging area)中的快照,任何未被暫存的變更,不會被添加進暫存區(qū)的快照,仍然保留在當(dāng)前工作目錄,我們可以隨后提交。

更詳細的提交信息(git commit -v)

除了使用默認的git commit指令,我們還可以添加-v參數(shù),在提交信息中顯示變更內(nèi)容,如下:

如上圖,和之前的比較,除了基本的提示,還有文件變更內(nèi)容提示,可以避免某些誤提交。

行內(nèi)輸入提交信息(git commit -m)

當(dāng)然,Git還支持我們使用-m參數(shù),指明我們在使用git commit指令時直接填寫提交備注信息:

跳過暫存區(qū)(git commit -a)

我們知道對于發(fā)生變更的對象,我們需要先使用git add,暫存變更,再使用git commit提交變更;

但是還有一種可以不使用git add指令的方式,可以提交變更,就是給git commit指令添加-a參數(shù):

git commit -a

但是需要注意的是,該參數(shù),只能直接提交工作目錄中已標(biāo)記的對象(文件或目錄)的變更,對于未標(biāo)記,如新添加的對象,是無效的。

查看提交歷史(Git log)

本節(jié)要介紹的是如何查看之前的提交歷史及信息,你應(yīng)該知道的git log指令,默認地,不帶參數(shù)時,執(zhí)行g(shù)it log指令,輸出的是當(dāng)前倉庫按逆序排序(最近提交在最前)的提交記錄:

如上圖,每個提交記錄包含其SHA-1校驗和,提交者用戶名,提交日期,提交備注信息。

git log指令支持指定許多參數(shù),以過濾輸出不同提交記錄,下文展開介紹。

指定查看提交記錄數(shù)(git log -2)

Git支持我們指定數(shù)量參數(shù),限定該次查看提交記錄數(shù)量,如git log -2,之后輸出最近的兩條提交記錄。

格式化輸出提交記錄(git log –pretty)

Git支持我們格式化輸出的提交記錄信息,使用–pretty參數(shù),其值主要有以下幾個:

  • oneline: 指定一行輸出一條提交記錄;
  • short: 指定按原格式輸出簡要信息;
  • full: 指定按原格式輸出信息;
  • fuller: 指定按原格式輸出更多信息;
  • format:””: 允許指定自定義輸出格式,如:
git log --pretty=format:"%h - %an, %ar : %s"

查看簡要提交變更(git log –stat)

git log --stat輸出如下:

除了輸出基礎(chǔ)提交信息,后面還輸出了本次提交的簡要變更信息:變更了多少文件,及每個文件變更的行數(shù),并在最后輸出總結(jié)數(shù)據(jù)。

查看詳細提交變更(git log -p)

相對于git log --stat輸出簡要提交變更信息,我們可以指定-p參數(shù):git log -p,輸出提交變更的詳細內(nèi)容,如:

更多參數(shù)說明

參數(shù) 說明
-p 顯示詳細提交變更
–stat 顯示簡要提交變更
–shortstat 在–stat參數(shù)輸出基礎(chǔ)上只輸出修改,新增或刪除的行
–name-only 顯示提交時發(fā)生變更的文件名
–name-status 顯示提交時發(fā)生變更的文件名,并顯示變更類型(刪除,新增,或修改)
–abbrev-commit 只顯示提交記錄SHA-1校驗和的前幾個字符
–relative-date 顯示簡要提交日期(如, “2 weeks ago”)
–graph 顯示分支提交歷史的ASCII圖
–pretty 支持預(yù)定義輸出格式,詳細說明見上文

過濾提交歷史輸出

Git支持我們在輸出歷史記錄時,添加多種過濾條件,最簡單的比如-<num>參數(shù)條件,指定輸出最近的若干條提交記錄,還有諸如提交時間,提交作者等條件。

  • –since/–after:git log --since=2.weeks
    輸出兩周內(nèi)的提交記錄,參數(shù)值還可以形如”2016-01-15″,”2 years 1 day 10 minutes ago”

  • –until/–before: git log --until=2016-01-15

  • –grep: git log --grep=README
    可以指定關(guān)鍵字,只有提交信息中存在關(guān)鍵字才會輸出

  • –author: 過濾輸出指定提交作者的記錄

  • –commiter: 輸出滿足指定commiter的提交記錄

  • -S: git -log -Swebpack
    輸出提交內(nèi)容(代碼或文件或目錄)包含指定字符串的記錄

刪除對象(git rm)

很多時候,我們也會需要從Git倉庫中刪除某些對象,rm就是刪除文件或目錄的指令,但是需要特別強調(diào)的是,該指令只是將某對象從當(dāng)前工作目錄刪除,如:


使用rm后,當(dāng)前狀態(tài)是”Changes not staged for commit:”此次變更未被暫存和提交。

若你需要將某對象從已標(biāo)記文件或暫存區(qū)刪除,則需要使用git rm指令,如下:


使用git rm后,變更會被暫存。

強制刪除(git rm -f)

當(dāng)我們發(fā)生某次變更,且將其添加到暫存區(qū)(index索引),我們只使用git rm指令是不行的:


我們必須加上-f參數(shù),指明強制刪除。

緩存變更(git rm –cached)

有時候,我們在某次變更添加了某文件(甚至可能已經(jīng)添加到暫存區(qū)),但是暫時不需要提交,又不想直接刪除它,即只在工作目錄存在,而不將其放入暫存區(qū),只需要添加--cached參數(shù),如修改README.txt同時,新增了test.txt文件,并且暫存了變更,之后提交時我們不希望此次提交test.txt,但又不希望刪除它,則在提交前使用git rm --cached test.txt

移動對象(git mv)

通常,我們也許需要移動或重命名某文件或目錄,Git有mv指令,還要一個更方便的指令git mv,如:

git mv a.txt b.txt

另一方面,重命名或移動某文件或目錄,這兩個操作對于Git來說是沒有太大區(qū)別的,比如上面的重命名文件操作等效于:

mv a.txt b.txt
git rm a.txt
git add b.txt

我們可以看到git mv指令是在mv指令操作的基礎(chǔ)上暫存此次操作的變更,而mv只是一個重命名或移動指令,不涉及版本控制流程。

到此,Git的基本使用,已經(jīng)介紹完成,不過,本篇講解的基礎(chǔ)操作,都是在計算機本地進行的版本控制,并沒有同步到服務(wù)器,那么下一篇的主題就出來了:Git如何與遠程服務(wù)器進行協(xié)同工作。

往期文章

更多干貨內(nèi)容請關(guān)注:極樂科技

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內(nèi)容