今天是Git系列課程第四課,上一課我們?cè)贕it空間里做了一些文件改動(dòng)并且知道了如何利用Git查看這些變動(dòng),今天痞子衡要講的是將這些變動(dòng)提交到Git本地倉庫前的準(zhǔn)備工作。
Git倉庫目錄下的文件改動(dòng)操作默認(rèn)都發(fā)生在Git工作區(qū)內(nèi),Git并不會(huì)主動(dòng)管理。如果希望Git能夠管理這些變動(dòng),你需要主動(dòng)通知Git。共有3種通知Git的命令(git add/rm/mv),痞子衡為大家一一講解。
1.將工作區(qū)文件改動(dòng)添加到暫存區(qū)git add
git add是第一種通知Git命令,這個(gè)命令用于告訴Git我們新增了文件改動(dòng),被git add命令操作過的文件(改動(dòng))便會(huì)處于Git暫存區(qū)。
1.1添加單文件改動(dòng)git add [file path]
上一節(jié)課我們已經(jīng)在工作區(qū)創(chuàng)建了3個(gè)文件,讓我們開始用git add將它們一一添加到暫存區(qū):
// 將main.c,test.c, dummy.c分別添加到暫存區(qū)
jay@pc MINGW64 /d/my_project/gittest (master)
$ git add main.c
jay@pc MINGW64 /d/my_project/gittest (master)
$ git add app/test.c
jay@pc MINGW64 /d/my_project/gittest (master)
$ git add app/dummy.c
// 查看此時(shí)的文件狀態(tài),3個(gè)文件都已在暫存區(qū)中了
jay@pc MINGW64 /d/my_project/gittest (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: app/dummy.c
new file: app/test.c
new file: main.c
1.2添加文件夾內(nèi)全部改動(dòng)git add -A [folder path]
有沒有覺得git add [filepath]一次只能添加一個(gè)文件不夠高效?別急,你還可以按文件夾來提交。這時(shí)我們?cè)僮鲆恍└膭?dòng),將dummy.c文件刪除,將test.c文件里的內(nèi)容全部刪除,再新增一個(gè)名叫trash.c的文件。
// 查看dummy.c,test.c, track.c狀態(tài)
jay@pc MINGW64 /d/my_project/gittest (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: app/dummy.c
new file: app/test.c
new file: main.c
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: app/dummy.c
modified: app/test.c
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/trash.c
讓我們?cè)囋噂it add -A [folderpath],執(zhí)行完這個(gè)命令后,我們可以看到app/文件夾下的所有類型的文件改動(dòng)(新增、修改、刪除)被一次性地存儲(chǔ)到了暫存區(qū),這下是不是效率高了很多。有興趣的朋友還可以繼續(xù)研究git add .(不包括刪除操作)和git add -u(不包括新增操作)兩個(gè)命令,實(shí)際上git add -A是這兩個(gè)命令的并集。
// 將app/文件夾下的所有類型的文件改動(dòng)全部添加到暫存區(qū)
jay@pc MINGW64 /d/my_project/gittest (master)
$ git add -A app/
// 查看此時(shí)Git狀態(tài),尤其是app/文件夾下的文件狀態(tài)
jay@pc MINGW64 /d/my_project/gittest (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: app/trash.c
new file: app/test.c
new file: main.c
2.將暫存區(qū)文件改動(dòng)退回git rm
git rm是第二種通知Git命令,這個(gè)命令用于告訴Git我們想把之前用git add添加的文件改動(dòng)從Git暫存區(qū)里拿出去,不需要Git記錄了。拿出去有兩種拿法,一種是從暫存區(qū)退回到工作區(qū),另一種是直接丟棄文件改動(dòng)。讓我們?cè)囍鴮est.c退回到工作區(qū),trash.c直接丟棄。
2.1退回文件改動(dòng)到工作區(qū)git rm --cache [file path]
// 將test.c的改動(dòng)從暫存區(qū)移回工作區(qū)
jay@pc MINGW64 /d/my_project/gittest (master)
$ git rm --cache app/test.c
rm 'app/test.c'
// 查看test.c是否已經(jīng)移回到工作區(qū)
jay@pc MINGW64 /d/my_project/gittest (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: app/trash.c
new file: main.c
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/test.c
2.2直接刪除文件git rm -f [file path]
// 將track.c文件直接從Git空間里刪除,不留痕跡
jay@pc MINGW64 /d/my_project/gittest (master)
$ git rm -f app/trash.c
rm 'app/trash.c'
jay@pc MINGW64 /d/my_project/gittest (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: main.c
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/
3.將暫存區(qū)文件移動(dòng)位置/重命名git mv
git mv是第三種通知Git命令,這個(gè)命令用于告訴Git我們想把之前用git add添加的文件直接在暫存區(qū)里重新命名或移動(dòng)到新位置。讓我們?cè)囍鴮ain.c重命名為app.c,并移動(dòng)到app/文件夾下。
3.1文件重命名git mv [src file] [dest file]
// 將main.c在暫存區(qū)里直接改名為app.c(app.c也記錄在暫存區(qū))
jay@pc MINGW64 /d/my_project/gittest (master)
$ git mv main.c app.c
jay@pc MINGW64 /d/my_project/gittest (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: app.c
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/
3.2移動(dòng)文件位置git mv [src file] [dest dir]
// 將app.c從gittest主目錄移動(dòng)到app/目錄下(移動(dòng)操作記錄在暫存區(qū))
jay@pc MINGW64 /d/my_project/gittest (master)
$ git mv app.c app/
jay@pc MINGW64 /d/my_project/gittest (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: app/app.c
Untracked files:
(use "git add <file>..." to include in what will be committed)
app/test.c