Git 常用命令學(xué)習(xí)

?? Remote:遠(yuǎn)程倉(cāng)庫(kù) Repository:本地倉(cāng)庫(kù)

?? Workspace: 工作區(qū) Index: 暫存區(qū)


安裝Git

Windows

? 在官網(wǎng)下載安裝程序, 然后按默認(rèn)選項(xiàng)安裝即可。

? 安裝完成后店诗,在開始菜單里找到“Git”->“Git Bash”审胚,蹦出一個(gè)類似命令行窗口的東西,就說明Git安裝成功员咽!

Linux

? 系統(tǒng)版本:CentOS 7.3,x86_64 , root用戶

? 查看系統(tǒng)是否已安裝git :git --version , 如果提示bash: /usr/bin/git: No such file or directory,則說明系統(tǒng)中還沒有安裝git; 如果顯示了git 版本號(hào),則證明系統(tǒng)中已經(jīng)安裝了git。

? Redhat系的Linux發(fā)行版,安裝git最便捷的方法是直接使用yum 安裝:yum install git , 但是經(jīng)過測(cè)試哺呜,CentOS 7.3 通過yum 安裝的Git 版本默認(rèn)為v1.8.3 , 而目前git最新版本為v2.16.0宦棺,低版本的git存在安全漏洞瓣距,所以不建議使用yum安裝,推薦使用源碼安裝git.

  1. 卸載已經(jīng)安裝的低版本的git:yum remove git

  2. 安裝git依賴包

sudo yum groupinstall "Development Tools" 
sudo yum install -y curl-devel expat-devel gettext-devel openssl-devel perl-CPAN perl-devel zlib-devel
  1. 依賴包安裝完成后代咸,需要找出并 下載最新版本的git,蹈丸,位于列表頂部的是最新版本,注意不要選擇帶有-rc的版本呐芥,因?yàn)樗砹艘粋€(gè)候選發(fā)布版本逻杖。

    選擇最新的版本 ,使用wget下載:

wget https://github.com/git/git/archive/v2.15.1.tar.gz
  1. 安裝git
#解壓
tar -zxvf git.tar.gz 
#編譯
cd git*   #進(jìn)入git解壓目錄
make configure
./configure   --prefix=/usr/local/
make prefix=/usr/local/ all
make install
  1. 查看版本 git --version , 如果顯示的git版本還是v1.8或提示找不到git目錄思瘟,執(zhí)行命令:cp /usr/local/bin/git* /usr/bin/ ,就可以了荸百。

    ?

設(shè)置Git

? 設(shè)置你的一些個(gè)人信息,如你提交的姓名和電子郵件:

$ git config --global user.name 'shijianzhihu'
$ git config --global user.email 'shijianzhihu@foxmail.com'

#查看所有已配置的全局信息
$ git config --list 

Git 常用命令

以下所有的命令說明都基于Git v2.13.0滨攻,不同版本的Git ,命令可能會(huì)有所區(qū)別够话!
git --version #查看git 版本
git [command] --help #查看command用戶手冊(cè)

git clone

? git clone 用來從從遠(yuǎn)程主機(jī)克隆一個(gè)版本庫(kù),語(yǔ)法為:git clone <版本庫(kù)地址> 光绕,該命令會(huì)在本地主機(jī)生成一個(gè)與遠(yuǎn)程主機(jī)版本庫(kù)同名的目錄女嘲,如果要指定不同的目錄名,可以將目錄名作為git clone命令的第二個(gè)參數(shù):
git clone <版本庫(kù)的網(wǎng)址> <本地目錄名>

git remote

Git要求每個(gè)遠(yuǎn)程主機(jī)都必須指定一個(gè)主機(jī)名诞帐。git remote命令就用于管理主機(jī)名.

#查看所有遠(yuǎn)程主機(jī)名
$ git remote
origin

#查看遠(yuǎn)程主機(jī)地址
$ git remote -v
origin  https://github.com/naver/ngrinder.git (fetch)
origin  https://github.com/naver/ngrinder.git (push)

git fetch

一旦遠(yuǎn)程主機(jī)的版本庫(kù)有了更新欣尼,需要將這些更新取回本地,這時(shí)就要用到git fetch命令.

#將遠(yuǎn)程主機(jī)的所有分支的更新取回本地
$ git fetch <遠(yuǎn)程主機(jī)名>
如:git fetch origin

#取回指定分支的更新
$ git fetch <遠(yuǎn)程主機(jī)名> <分支名>
如:git fetch origin dev

git branch

git branch 用來顯示景埃、創(chuàng)建或刪除分支媒至。

OPTIONS

  1. 不帶參數(shù)顶别,會(huì)列出所有本地分支,并且在當(dāng)前分支前加"*";
$ git branch
  dev
  master
* test
  1. git branch <newBranch> 新建本地分支拒啰,但不會(huì)自動(dòng)切換到該分支
$ git branch bug-fixed
  1. <-r, --remotes> 列出所有遠(yuǎn)程分支
$ git branch -r
  origin/bug-fixed
  origin/b2b
  origin/beta
  origin/collections
  origin/chart
  1. <-a --all> 列出所有本地分支和遠(yuǎn)程分支
$ git branch -a
  1. <-m ,--move | -M> 移動(dòng)/重命名一個(gè)分支和相應(yīng)的歷史信息
# <-M>:強(qiáng)制move/rename
$ git branch -m bug-fixed bug-fixed2
  1. <-d, --delete | -D> 刪除本地分支驯绎,不能刪除當(dāng)前checkout的分支;
    如果要?jiǎng)h除的分支有未合并的內(nèi)容,則會(huì)報(bào)錯(cuò):'the branch XXX is not fully merged',解決辦法:使用'-D' 強(qiáng)制刪除谋旦;
$ git branch -D 'bug-fixed'

# 補(bǔ)充:利用管道命令實(shí)現(xiàn)批量刪除分支
$ git branch | grep 'branchName' | xargs branch -D
  1. <-v, --verbose>
# 查看本地分支最后的修改信息剩失,當(dāng)前分支名稱前會(huì)帶有'*'
$ git branch -av
  bug-fixed3 fdcbdf7 add bug -fixed2
  dev        1599863 test
* master     9faecaf [ahead 1] update test.txt  #[ahead 1]表示本地分支比遠(yuǎn)程分支領(lǐng)先一個(gè)commit
  test       1599863 test
  remotes/origin/HEAD       -> origin/master
  remotes/origin/bug-fixed3 fdcbdf7 add bug -fixed2

git checkout

git checkout 用來切換分支或恢復(fù)工作樹文件。

OPTIONS

  1. git checkout <branch> 切換當(dāng)前分支到本地已有分支
$ git checkout dev
Switched to branch 'dev'

新建本地分支册着,并切換到該分支

$ git checkout -b five
Switched to a new branch 'five'

新建本地分支拴孤,并切換到該分支,而且關(guān)聯(lián)遠(yuǎn)程分支(必須已存在 否則報(bào)錯(cuò))

$ git checkout -b six --track origin/dev
Switched to a new branch 'six'
Branch six set up to track remote branch dev from origin.

第三條命令相當(dāng)于以下命令的合集:

$ git branch 
$ git checkout six
$ git branch --set-upstream-to origin/dev six
  1. git checkout <-- fileNmae> 注意 '--' 和 'fileName' 之間有空格甲捏!作用是將指定文件在工作區(qū)的修改撤銷到最近一次git add 或git commit時(shí)的內(nèi)容(只對(duì)tracked file有效)演熟,比如下面的例子:
$ cat test.txt
one
$ git add . -v
add 'test.txt'
$ git commit -m 'update test.txt'
[test a2d987d] update test.txt
 1 file changed, 1 insertion(+)

# 此時(shí)再去修改文件內(nèi)容
$ vim test.txt
$ cat test.txt
one
two

# 撤銷修改
$ git checkout -- test.txt #注意空格,否則報(bào)錯(cuò)
$ cat test.txt
one
$ git status 
nothing to commit, working tree clean

需要一次撤銷多個(gè)文件的修改時(shí)司顿,支持以下寫法:

$ git checkout -- stu.txt test.txt
$ git checkout -- *
$ git checkout -- *.txt
  1. git checkout -- 不加文件名來查看當(dāng)前工作區(qū)修改了哪些文件, 和git status效果差不多
$ git checkout --
M       blog.txt
D       start.txt
Your branch is up-to-date with 'origin/sprider'.
  1. 取文件在commit_id時(shí)的版本
$ git checkout 1599863 fileName

git status

git status 用來顯示工作樹狀態(tài), git會(huì)非常友好的提示用戶下一步的操作芒粹,請(qǐng)看下面的例子:

$ git status
On branch test
Your branch is up-to-date with 'origin/test'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        blog.txt

nothing added to commit but untracked files present (use "git add" to track)

$ git add blog.txt

$ git status
#
On branch test
Your branch is up-to-date with 'origin/test'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   blog.txt

$ git commit -m 'add blog.txt'
$ git status
On branch test
Your branch is ahead of 'origin/test' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean

git add

git add命令主要用于把我們要提交的文件的信息添加到索引庫(kù)(Index)中。當(dāng)我們使用git commit時(shí)大溜,git將依據(jù)索引庫(kù)中的內(nèi)容來進(jìn)行文件的提交化漆。git add命令可以在commit之前多次執(zhí)行。

git add file

COMMON OPTIONS

#可以使用'*'模糊匹配路徑, 且路徑可以到目錄層級(jí)
$ git add *.c
$ git add test/

<-v,--verbose>
#顯示本次added的文件名
$ git add -v file3.txt
add 'file3.txt'
$ git add -v study/
add 'study/study.txt'

<-f, --force>
#允許添加被忽略的文件
$ git add -f commonVars.pyc

<-u, --update>
#add被修改(modified)和被刪除(deleted)文件钦奋,不包含新文件(new,untracked file)
$ git add -uv

<-A, --all>
#add所有變化,包括被修改(modified)座云、被刪除(deleted)文件和包括新文件(new)
$ git add -Afv

git add -A | git add -u |git add .

  • git add .:他會(huì)監(jiān)控工作區(qū)的狀態(tài)樹,使用它會(huì)把工作時(shí)的所有變化提交到暫存區(qū)付材,包括modified朦拖、new和deleted ;
  • git add -u:他僅監(jiān)控已經(jīng)被add的文件(即tracked file),他會(huì)將被修改的文件提交到暫存區(qū)伞租。add -u 不會(huì)提交new(untracked file);
  • git add -A:等同于 git add .;
    注意贞谓,在Git v1.x.x版本,git add . 不能添加deleted文件

git 特殊文件

有些時(shí)候葵诈,我們必須或被必須把某些文件放到Git的工作目錄中,但是又不能提交它們祟同。這就導(dǎo)致每次git status都會(huì)顯示Untracked files ... 作喘。為了解決這個(gè)文件,可以在Git工作區(qū)的根目錄下創(chuàng)建一個(gè)特殊的.gitignore文件晕城,這個(gè)文件的作用就是告訴Git哪些文件不需要添加到版本管理中泞坦。實(shí)際項(xiàng)目中,很多文件都是不需要版本管理的砖顷,比如Python的.pyc文件和一些包含密碼的配置文件等等贰锁。這個(gè)文件的內(nèi)容是一些規(guī)則赃梧,Git會(huì)根據(jù)這些規(guī)則來判斷是否將文件添加到版本控制中。

GitHub中已經(jīng)為我們準(zhǔn)備了各種配置文件豌熄,只需要組合一下就可以使用了授嘀。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore
常用的規(guī)則有:

1. /mtk/        #過濾整個(gè)文件夾
2. *.zip          #過濾所有.zip文件
3. /mtk/do.c   #過濾某個(gè)具體文件

忽略文件的原則是:

  • 忽略操作系統(tǒng)自動(dòng)生成的文件,比如縮略圖等锣险;
  • 忽略編譯生成的中間文件蹄皱、可執(zhí)行文件等,也就是如果一個(gè)文件是通過另一個(gè)文件自動(dòng)生成的芯肤,那自動(dòng)生成的文件就沒必要放進(jìn)版本庫(kù)巷折,比如Java編譯產(chǎn)生的.class文件;
  • 忽略你自己的帶有敏感信息的配置文件崖咨,比如存放口令的配置文件锻拘。

gitignore文件中添加新過濾文件,但是此文件已經(jīng)提交到遠(yuǎn)程庫(kù)击蹲,可以使用以下方式如何解決:

第一步逊拍,為避免沖突需要先同步下遠(yuǎn)程倉(cāng)庫(kù)
$ git pull origin 

第二步,在本地項(xiàng)目目錄下刪除緩存
$ git rm -r --cached . 

第三步际邻,再次add所有文件
輸入以下命令芯丧,再次將項(xiàng)目中所有文件添加到本地倉(cāng)庫(kù)緩存中
$ git add .

第四步,添加commit世曾,提交到遠(yuǎn)程庫(kù)
$ git commit -m "filter new files"
$ git push origin

git commit

git commit 記錄對(duì)存儲(chǔ)庫(kù)的更改信息缨恒,此命令默認(rèn)提交的是暫存區(qū)的內(nèi)容,也就是 Changes to be committed 中的文件轮听,最常用的參數(shù)是<-m>骗露,用來添加本次提交的相關(guān)信息,如:git commit -m 'update file'

如果使用了<-a>參數(shù)血巍,則除了將暫存區(qū)里的文件提交外萧锉,還提交 Changes but not updated 中的文件。通常我們提交git的時(shí)候都是通過以下三大步:

git add .
git commit -m "some str"
git push

實(shí)際上述寡,你只需要兩條命令就夠了柿隙,除非有新的文件(untracked file)要被添加進(jìn)去。

git commit -am "some str"
git push

git pull

git pull命令的作用是鲫凶,取回遠(yuǎn)程主機(jī)指定分支的更新禀崖,再與本地的指定分支合并。實(shí)質(zhì)上等同于先做git fetch,再做git merge.

命令的完整格式為:

$ git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>

比如:取回origin主機(jī)的bugifx分支與本地的bugfix2分支合并,需要寫成下面這樣

git pull origin bugfix:bugfix2

如果遠(yuǎn)程分支是與當(dāng)前分支合并螟炫,則本地分支名可以省略

$ git pull origin dev

如果當(dāng)前分支與遠(yuǎn)程分支存在關(guān)聯(lián)關(guān)系波附,遠(yuǎn)程分支名也可以省略

$ git pull origin

如果當(dāng)前分支只有一個(gè)追蹤分支,則遠(yuǎn)程主機(jī)名也可以省略,以下命令表示為:當(dāng)前分支自動(dòng)與唯一一個(gè)遠(yuǎn)程追蹤分支進(jìn)行合并

$ git pull

如果合并需要使用rebase模式掸屡,可以加上'-- rebase'選項(xiàng)

$ git pull --rebase <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>

如果遠(yuǎn)程主機(jī)刪除了某個(gè)分支封寞,默認(rèn)情況下,git pull 不會(huì)在拉取遠(yuǎn)程分支的時(shí)候仅财,刪除對(duì)應(yīng)的本地分支狈究。這是為了防止,由于其他人操作了遠(yuǎn)程主機(jī)满着,導(dǎo)致git pull不知不覺刪除了本地分支谦炒。但是,你可以改變這個(gè)行為风喇,加上參數(shù) -p 就會(huì)在本地刪除遠(yuǎn)程已經(jīng)刪除的分支宁改。

$ git pull -p
# 等同于下面的命令
$ git fetch --prune origin 
$ git fetch -p

git push

git push命令用于將本地分支的更新,推送到遠(yuǎn)程主機(jī)魂莫。它的命令格式與git pull命令相仿但不要搞混了还蹲,其實(shí)很容易理解區(qū)分的.

#完整格式
$ git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>

#如果省略遠(yuǎn)程分支名,則表示將本地分支推送與之存在"追蹤關(guān)系"的遠(yuǎn)程分支(通常兩者同名)
#如果該遠(yuǎn)程分支不存在耙考,則會(huì)被新建谜喊。
$ git push origin dev

#如果省略本地分支名,則表示刪除指定的遠(yuǎn)程分支倦始,因?yàn)檫@表示推送一個(gè)空的本地分支到遠(yuǎn)程分支斗遏。
#注意origin 和冒號(hào)之間需要有空格
$ git push origin :dev

#如果當(dāng)前分支與遠(yuǎn)程分支存在關(guān)聯(lián)關(guān)系,遠(yuǎn)程分支名也可以省略
$ git push origin
如果當(dāng)前分支與遠(yuǎn)程分支沒有追蹤關(guān)系鞋邑,則會(huì)報(bào)錯(cuò):
fatal: The current branch bug-fixed2 has no upstream branch.
To push the current branch and set the remote as upstream, use
    git push --set-upstream origin bug-fixed2
    
#如果當(dāng)前分支只有一個(gè)追蹤分支诵次,則遠(yuǎn)程主機(jī)名也可以省略
$ git push

git log | git reflog

git log 用來查看當(dāng)前分支的提交歷史,不包含已經(jīng)被撤銷的commit:

$ git log
commit 150089329868f665cfd6a1f1ac301d31ff232c75 (HEAD -> sprider)
Author: xxxxx <shijianzhihu@foxmail.com>
Date:   Tue Feb 6 14:14:06 2018 +0800
    Revert "test"
    This reverts commit 5e2d6fc0bd652de0e612e50b84edb9b933d2d459.
commit 5e2d6fc0bd652de0e612e50b84edb9b933d2d459
Author: xxxxx <shijianzhihu@foxmail.com>
Date:   Tue Feb 6 14:13:54 2018 +0800
    test

如果嫌輸出信息太多枚碗,以試試加上--oneline參數(shù):

$ git log --oneline
1500893 (HEAD -> sprider) Revert "test"
5e2d6fc test
a0eb8b5 update blog.txt
ec9734c Revert "start test"
1616640 Revert "blog"

顯示每次提交的內(nèi)容差異可以使用< -p> 參數(shù)逾一,<-n>則為僅顯示最近的n次歷史:

$ git log -p -1
commit 150089329868f665cfd6a1f1ac301d31ff232c75 (HEAD -> sprider)
Author: xxxxx <shijianzhihu@foxmail.com>
Date:   Tue Feb 6 14:14:06 2018 +0800
    Revert "test"
    This reverts commit 5e2d6fc0bd652de0e612e50b84edb9b933d2d459.
diff --git a/blog b/blog
index 40a3b4a..9daeafb 100644
--- a/blog
+++ b/blog
@@ -1 +1 @@
-test111
+test

git reflog 用來顯示整個(gè)本地倉(cāng)儲(chǔ)的commit, 包括所有branch的commit, 甚至包括已經(jīng)撤銷的commit, 只要HEAD發(fā)生了變化(如checkout branch, pull, commit等), 就會(huì)在reflog里面看得到。

$ git reflog
1500893 (HEAD -> sprider) HEAD@{0}: checkout: moving from six to sprider
02cffe0 (six) HEAD@{1}: commit: branch six
1599863 (origin/dev, five) HEAD@{2}: checkout: moving from sprider to six
1500893 (HEAD -> sprider) HEAD@{3}: revert: Revert "test"
5e2d6fc HEAD@{4}: commit: test

git revert | git reset

git revert 用來回滾一些現(xiàn)有的提交, 但并不是從項(xiàng)目歷史中移除這個(gè)commit肮雨,舊的commit還是保留在歷史項(xiàng)目里面的遵堵,而git reset 則會(huì)刪除舊的commit。

用法: git revert <commit-id>

$ git log --oneline | head -n 1
a0eb8b5 update blog.txt

$ git revert HEAD
[sprider 60d4654] Revert "update blog.txt"
 1 file changed, 1 insertion(+), 2 deletions(-)
 
$ git log --oneline | head -n 2
60d4654 Revert "update blog.txt"
a0eb8b5 update blog.txt

git reset <--hard|soft|mixed|merge|keep> commitID 也是常用的版本回滾命令怨规,其中比較重要的參數(shù)是mode陌宿,也就是 --hard、--soft椅亚、--mixed... 比較常見的是--hard和--soft:

  1. --hard是指完全重設(shè)限番,會(huì)把回退到某版本之后的修改全部刪除,
  2. --soft這是個(gè)回退解體呀舔,讓版本庫(kù)回退到某個(gè)版本,這個(gè)版本之后的修改全部存在緩存區(qū),這個(gè)時(shí)候在commit的話媚赖,又會(huì)把會(huì)退的部分重新加載到最新版本中霜瘪;

git diff

git diff用于比較兩次修改之間的差異。

  • 比較工作區(qū)與暫存區(qū)

git diff 不加參數(shù)即默認(rèn)比較工作區(qū)與暫存區(qū)

$ git diff
diff --git a/b2.txt b/b2.txt
index be738a5..2ffe5d8 100644
--- a/b2.txt
+++ b/b2.txt
@@ -1,2 +1,2 @@
 test1
-test222
+22dsada2
  • 比較暫存區(qū)與最新本地版本庫(kù)
    git diff --cached
  • 比較工作區(qū)與最新本地版本庫(kù)
    git diff HEAD
  • 比較工作區(qū)與指定commit-id的差異
    git diff commit-id
  • 比較暫存區(qū)與指定commit-id的差異
    git diff --cached commit-id
  • 比較兩個(gè)commit-id之間的差異
    git diff commit-id commit-id

git stash

git stash 用來備份當(dāng)前的工作區(qū)的內(nèi)容惧磺,從最近的一次提交中讀取相關(guān)內(nèi)容颖对,讓工作區(qū)保證和上次提交的內(nèi)容一致。同時(shí)磨隘,將當(dāng)前的工作區(qū)內(nèi)容保存到Git棧中缤底。

  • git stash list 顯示Git棧內(nèi)的所有備份,可以利用這個(gè)列表來決定從那個(gè)地方恢復(fù)番捂。
  • git stash clear 清空Git棧.
  • git stash pop 從Git棧中讀取最近一次stash的內(nèi)容个唧,恢復(fù)工作區(qū)的相關(guān)內(nèi)容。

兩種恢復(fù)方法:

  • 用git stash apply恢復(fù)设预,但是恢復(fù)后徙歼,stash內(nèi)容并不刪除,你需要用git stash drop來刪除鳖枕;
  • 用git stash pop魄梯,恢復(fù)的同時(shí)把stash內(nèi)容也刪了;

可以多次stash宾符,恢復(fù)的時(shí)候酿秸,先用git stash list查看,然后恢復(fù)指定的stash魏烫,用命令:
git stash apply stash@{0}

git rm

git rm用于從從工作樹和暫存區(qū)中刪除文件辣苏,他作用的對(duì)象只能是tracked files .

它的作用和git add 類似,可以理解為一個(gè)是添加一個(gè)是修改则奥。git rm 要和git commit 配合使用考润,才真正能起到刪除的作用。

$ git rm test.txt stu.txt
rm 'stu.txt'
rm 'test.txt'
$ git status
On branch test
Your branch is up-to-date with 'origin/test'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    stu.txt
        deleted:    test.txt
$ git commit -m 'delete two files'
[test ccd7143] delete two files
 2 files changed, 4 deletions(-)
 delete mode 100644 stu.txt
 delete mode 100644 test.txt
$ git status
On branch test
Your branch is ahead of 'origin/test' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean

#刪除文件夾读处,-r表示遞歸刪除糊治,-f表示強(qiáng)制刪除
$ git rm -rf qt/ 
rm 'qt/file.txt'

$ git rm -f rainbow.txt #不能對(duì)untracked file使用
fatal: pathspec 'rainbow.txt' did not match any files

git rm 和 rm 的區(qū)別

通過上面簡(jiǎn)單的介紹,我們發(fā)現(xiàn)git rm 和 shell 命令rm 非常相似罚舱,我們是否可以不使用git rm井辜,而是直接rm后,然后再git add/commit,這樣是否可以呢管闷? 答案當(dāng)然是可以的粥脚。

使用git rm來刪除文件,git同時(shí)會(huì)將操作日歷記錄下來包个,git log就可以看到刷允;而使用rm來刪除文件,git并不會(huì)記錄,這也是十分易于理解的树灶。直觀的來講纤怒,git rm 刪除過的文件,執(zhí)行 git commit -m "abc"提交時(shí)天通,會(huì)自動(dòng)將刪除該文件的操作提交上去泊窘;而對(duì)于用 rm 命令直接刪除的文件,執(zhí)行 git commit -m "abc" 提交時(shí)像寒,則不會(huì)將刪除該文件的操作提交上去烘豹。不過不要緊,即使你已經(jīng)通過 rm 將某個(gè)文件刪除掉了诺祸,也可以再通過 git rm 命令重新將該文件從 git 的記錄中刪除掉携悯,這樣的話,在執(zhí)行 git commit -am "abc"后序臂,也能將這個(gè)刪除操作提交上去蚌卤。(git commit -am 寫成git commit -ma 會(huì)報(bào)錯(cuò))

一般說來,在git目錄下刪除文件時(shí)奥秆,可以選擇以下兩種方式:

  • git rm + git commit -m 'text'
  • rm + git commit -am 'text'

git mv

git mv 用來移動(dòng)或重命名文件逊彭、目錄或符號(hào)鏈接。

$ git mv b1.txt b2.txt
$ git mv rainbow.txt sprider/
$ git status
On branch sprider
Your branch is ahead of 'origin/sprider' by 1 commit.
  (use "git push" to publish your local commits)
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        renamed:    b1.txt -> b2.txt
        renamed:    rainbow.txt -> sprider/rainbow.txt
        
$ git commit -m 'rename and move'
[sprider b08e44d] rename and move
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename b1.txt => b2.txt (100%)
 rename rainbow.txt => sprider/rainbow.txt (100%)

參考文檔

  1. Git 教程构订,廖雪峰

  2. Git遠(yuǎn)程操作詳解侮叮,阮一峰

  3. Git忽略規(guī)則.gitignore梳理 ,散盡浮華

  4. git的reset和checkout的區(qū)別悼瘾,chanjarster

  5. git add -A 和 git add . 的區(qū)別 囊榜,PajamaCat

  6. git branch用法總結(jié) ,KKK_Kevin

  7. Git自學(xué)之路(四) - gitbranch 分支亥宿,JunkChen-程開均

  8. Git中的upstream和downstream概述卸勺,易生一世

  9. “git rm” 和“rm”的區(qū)別,jfkidear

  10. git commit -m與git commit -am的區(qū)別

  11. Git的撤消操作 - 重置, 簽出 和 撤消

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烫扼,一起剝皮案震驚了整個(gè)濱河市曙求,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌映企,老刑警劉巖悟狱,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異堰氓,居然都是意外死亡挤渐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門双絮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浴麻,“玉大人得问,你說我怎么就攤上這事“渍停” “怎么了椭赋?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵抚岗,是天一觀的道長(zhǎng)或杠。 經(jīng)常有香客問我,道長(zhǎng)宣蔚,這世上最難降的妖魔是什么向抢? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮胚委,結(jié)果婚禮上挟鸠,老公的妹妹穿的比我還像新娘。我一直安慰自己亩冬,他們只是感情好艘希,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硅急,像睡著了一般覆享。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上营袜,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天撒顿,我揣著相機(jī)與錄音,去河邊找鬼荚板。 笑死凤壁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的跪另。 我是一名探鬼主播拧抖,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼免绿!你這毒婦竟也來了唧席?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤针姿,失蹤者是張志新(化名)和其女友劉穎袱吆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體距淫,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绞绒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榕暇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓬衡。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喻杈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狰晚,到底是詐尸還是另有隱情筒饰,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布壁晒,位于F島的核電站瓷们,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秒咐。R本人自食惡果不足惜谬晕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望携取。 院中可真熱鬧攒钳,春花似錦、人聲如沸雷滋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晤斩。三九已至焕檬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尸昧,已是汗流浹背揩页。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烹俗,地道東北人爆侣。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像幢妄,于是被迫代替她去往敵國(guó)和親兔仰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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