命令
- git add 將文件添加到暫存區(qū)
- git commit 將暫存區(qū)的內(nèi)容提交到(本地)分支
工作區(qū)痹仙、暫存區(qū)和分支
這幾個簡單命令的操作會將數(shù)據(jù)從工作區(qū)添加到版本庫里面。
命令的練習和總結(jié)
在此版本下進行操作:git version 2.13.0
總結(jié):
git add change-me delete-me 【提交到暫存區(qū)贯卦,指定文件抗愁,將工作區(qū)的文件提交到暫存區(qū)】
git add . 與 git add -A 【會將所有的工作區(qū)的文件放入暫存區(qū)】
git add -u 【提交被修改(modified)和被刪除(deleted)文件,不包括新文件(new)】
git rm --cached change-me delete-me 將暫存區(qū)移動到工作區(qū)
當我們需要刪除暫存區(qū)或分支上的文件, 同時工作區(qū)也不需要這個文件了, 可以使用
git rm file_path
當我們需要刪除暫存區(qū)或分支上的文件, 但本地又需要使用, 只是不希望這個文件被版本控制, 可以使用
git rm --cached file_path
對于之前已經(jīng)在版本庫里面饱亮,使用git rm --cached 會將文件移除版本庫个盆,并放在工作區(qū)脖岛。這個時候文件對于版本來說是新增的。
對于之前不再版本庫中砾省,就變成將暫存區(qū)移動到工作區(qū)鸡岗。-
git reset 【將暫存區(qū)的東西重置】
git rm -- cached 是從stage(index混槐,暫存區(qū)) 里面刪除文件编兄,當你提交(commit)之后文件就會刪除了,就是移除版本庫声登。狠鸳。
git reset HEAD -- file : 回退暫存區(qū)里的文件(還原為HEAD commit里面該文件的狀態(tài)),會撤銷從上一次提交(commit)之后的一些操作悯嗓。
如果是對于新增文件件舵,這兩個操作時等效的。
這兩個命令都是對stage,index的操作脯厨。
git reset HEAD file (命令默認參數(shù)為 --mixed)
git reset命令有三種模式:git reset [--<mode>] [<commit>]該命令用來回退當前的分支head 到 <commit>, 根據(jù)<mode>不同 --soft --mixed --hard铅祸,會對working tree和index和HEAD進行重置, mode分為以下幾種
1) --soft: 回退到某個版本,只回退了commit的信息,不會恢復到index file一級(對索引不做改動)临梗。如果還要提交涡扼,直接commit即可,執(zhí)行該模式之后盟庞,git status 對所有修改的文件會提示(Changes to be committed)
2) --mixed: 此為默認方式吃沪,不帶任何參數(shù)的git reset,即是這種方式什猖,它回退到某個版本票彪,只保留源碼,回退commit和index信息不狮。
3) --hard: 徹底回退到某個版本降铸,本地的源碼也會變?yōu)樯弦粋€版本的內(nèi)容(所有的修改都會被丟棄)。 -
git commit -am 【a必須寫在m的前面】
對于已經(jīng)在版本庫(即git commit 過的文件)或者在暫存區(qū)的(即git add 過的文件)摇零,修改過的話垮耳,就可以直接使用git commit -am 進行提交,省略git add 的步驟
直接使用會出現(xiàn)下面的錯誤
$ git commit -am 'xx' 【對于沒有在版本庫的或者暫存區(qū)直接使用這個命令的話遂黍,會提示下面這】
On branch master
Untracked files:
xxnothing added to commit but untracked files present
練習
test@m MINGW64 /d/test/test_git
$ git init
Initialized empty Git repository in D:/test/test_git/.git/
$ echo change me > change-me
$ echo delete me > delete-me
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
change-me
delete-me
nothing added to commit but untracked files present (use "git add" to track)
test@m MINGW64 /d/test/test_git (master)
$ git add change-me delete-me #提交到暫存區(qū)终佛,指定文件,將工作區(qū)的文件提交到暫存區(qū)
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)【當時新增文件的時候雾家,會提示你使用git rm --cached 】
new file: change-me
new file: delete-me
test@m MINGW64 /d/test/test_git (master)
$ git rm --cached change-me delete-me 將暫存區(qū)移動到工作區(qū)
rm 'change-me'
rm 'delete-me'
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
change-me
delete-me
nothing added to commit but untracked files present (use "git add" to track)
test@m MINGW64 /d/test/test_git (master)
$ git commit -m 'inital' 提交
[master (root-commit) 1bdcf48] inital
2 files changed, 2 insertions(+)
create mode 100644 change-me
create mode 100644 delete-me
$ echo ok >> change-me
$ rm delete-me
$ echo Add me > add-me
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
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)
modified: change-me
deleted: delete-me
Untracked files:
(use "git add <file>..." to include in what will be committed)
add-me
no changes added to commit (use "git add" and/or "git commit -a")
test@m MINGW64 /d/test/test_git (master)
$ git add . 【會將所有的工作區(qū)的文件放入暫存區(qū)铃彰,與命令git add -A 效果一樣】
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: add-me
modified: change-me
deleted: delete-me
test@m MINGW64 /d/test/test_git (master)
$ git reset 【將暫存區(qū)的東西重置】
Unstaged changes after reset:
M change-me
D delete-me
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
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)
modified: change-me
deleted: delete-me
Untracked files:
(use "git add <file>..." to include in what will be committed)
add-me
no changes added to commit (use "git add" and/or "git commit -a")
$ git add -u 【提交被修改(modified)和被刪除(deleted)文件,不包括新文件(new)】
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: change-me
deleted: delete-me
Untracked files:
(use "git add <file>..." to include in what will be committed)
add-me
test@m MINGW64 /d/test/test_git (master)
$ echo >> add-me
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: add-me
no changes added to commit (use "git add" and/or "git commit -a")
test@m MINGW64 /d/test/test_git (master)
$ git add .
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)【當是更改文件的時候芯咧,會提示你使用git reset HEAD file 撤銷暫存區(qū)的東西】
modified: add-me
test@m MINGW64 /d/test/test_git (master)
$ git rm --cached add-me
rm 'add-me'
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: add-me
Untracked files:
(use "git add <file>..." to include in what will be committed)
add-me
$ git commit -m 'xx' 【這個時候牙捉,就會從index中刪除該文件,也就是不在版本庫里面了】
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
add-me
nothing added to commit but untracked files present (use "git add" to track)
test@m MINGW64 /d/test/test_git (master)
$ git add .
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: add-me 【這個時候文件就變成新增的敬飒,因為我們使用git rm --cache進行刪除】
test@m MINGW64 /d/test/test_git (master)
$ ls
add2.txt add3.txt add-me change-me ddxx
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
ddxx
nothing added to commit but untracked files present (use "git add" to track)
test@m MINGW64 /d/test/test_git (master)
$ git add .
test@m MINGW64 /d/test/test_git (master)
$ ls
add2.txt add3.txt add-me change-me ddxx
test@m MINGW64 /d/test/test_git (master)
$ ls
add2.txt add3.txt add-me change-me ddxx
test@m MINGW64 /d/test/test_git (master)
$ echo xx > ddxx
test@m MINGW64 /d/test/test_git (master)
$ ls
add2.txt add3.txt add-me change-me ddxx
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: ddxx
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: ddxx
test@m MINGW64 /d/test/test_git (master)
$ git commit -am 'x' 【對于已經(jīng)在版本庫或者再暫存區(qū)的文件邪铲,可以直接使用 -am直接提交∥揶郑可以省略git add 】
[master 943ea92] x
1 file changed, 1 insertion(+)
create mode 100644 ddxx
test@m MINGW64 /d/test/test_git (master)
$ echo mm > xx
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
xx
nothing added to commit but untracked files present (use "git add" to track)
test@m MINGW64 /d/test/test_git (master)
$ git commit -am 'xx' 【對于沒有在版本庫的或者暫存區(qū)直接使用這個命令的話带到,會提示下面這】
On branch master
Untracked files:
xx
nothing added to commit but untracked files present
test@m MINGW64 /d/test/test_git (master)
$ git reset
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
xx
nothing added to commit but untracked files present (use "git add" to track)
test@m MINGW64 /d/test/test_git (master)
$ ls
add2.txt add3.txt add-me change-me ddxx xx
test@m MINGW64 /d/test/test_git (master)
$ > ddxx
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: ddxx
Untracked files:
(use "git add <file>..." to include in what will be committed)
xx
no changes added to commit (use "git add" and/or "git commit -a")
test@m MINGW64 /d/test/test_git (master)
$ git commit -am 'x'
[master 96bb4c2] x
1 file changed, 1 deletion(-)
test@m MINGW64 /d/test/test_git (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
xx
nothing added to commit but untracked files present (use "git add" to track)