?? 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.
卸載已經(jīng)安裝的低版本的git:
yum remove git
安裝git依賴包
sudo yum groupinstall "Development Tools"
sudo yum install -y curl-devel expat-devel gettext-devel openssl-devel perl-CPAN perl-devel zlib-devel
-
依賴包安裝完成后代咸,需要找出并 下載最新版本的git,蹈丸,位于列表頂部的是最新版本,注意不要選擇帶有-rc的版本呐芥,因?yàn)樗砹艘粋€(gè)候選發(fā)布版本逻杖。
選擇最新的版本 ,使用wget下載:
wget https://github.com/git/git/archive/v2.15.1.tar.gz
- 安裝git
#解壓
tar -zxvf git.tar.gz
#編譯
cd git* #進(jìn)入git解壓目錄
make configure
./configure --prefix=/usr/local/
make prefix=/usr/local/ all
make install
-
查看版本
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
- 不帶參數(shù)顶别,會(huì)列出所有本地分支,并且在當(dāng)前分支前加"*";
$ git branch
dev
master
* test
- git branch <newBranch> 新建本地分支拒啰,但不會(huì)自動(dòng)切換到該分支
$ git branch bug-fixed
- <-r, --remotes> 列出所有遠(yuǎn)程分支
$ git branch -r
origin/bug-fixed
origin/b2b
origin/beta
origin/collections
origin/chart
- <-a --all> 列出所有本地分支和遠(yuǎn)程分支
$ git branch -a
- <-m ,--move | -M> 移動(dòng)/重命名一個(gè)分支和相應(yīng)的歷史信息
# <-M>:強(qiáng)制move/rename
$ git branch -m bug-fixed bug-fixed2
- <-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
- <-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
-
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
-
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
-
git checkout --
不加文件名來查看當(dāng)前工作區(qū)修改了哪些文件, 和git status
效果差不多
$ git checkout --
M blog.txt
D start.txt
Your branch is up-to-date with 'origin/sprider'.
- 取文件在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í)行。
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:
- --hard是指完全重設(shè)限番,會(huì)把回退到某版本之后的修改全部刪除,
- --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%)
參考文檔
Git 教程构订,廖雪峰
Git遠(yuǎn)程操作詳解侮叮,阮一峰
Git忽略規(guī)則.gitignore梳理 ,散盡浮華
git的reset和checkout的區(qū)別悼瘾,chanjarster
git add -A 和 git add . 的區(qū)別 囊榜,PajamaCat
git branch用法總結(jié) ,KKK_Kevin
Git自學(xué)之路(四) - gitbranch 分支亥宿,JunkChen-程開均
Git中的upstream和downstream概述卸勺,易生一世
“git rm” 和“rm”的區(qū)別,jfkidear