1、Git本地版本庫結構
如下圖所示:
- 工作區(
Working Directory
)
新增、編輯、修改、刪除檔案等操作。 - 暫存區(
Stage
)
打算提交,但還沒提交的內容。最後可以統一提交到Git倉庫中。也可以不提交,撤銷回來。 - Git倉庫(
Git Repository
)
實實在在的專案儲存的每個一歷史的版本。
2、Git常用操作方法
Git的專屬命令都是以git
開始的,然後是索要執行的操作,最後還可以加上一些引數。
以下命令都需在倉庫中執行。
(1)狀態檢視。
命令: git status
命令作用:檢視工作區、暫存區狀態。
(2)新增檔案到暫存區。
命令:git add [file name]
命令作用:
- 該命令的作用是告訴Git系統,將指定檔案的當前快照寫入到版本庫暫存區。即,將檔案交給Git進行版本管理。
- 提交到暫存區,並且轉換檔案中的換行符。
- 被Git追蹤的暫存區中的檔案可以被提交到本地版本庫。
(3)檔案從暫存區撤回到工作區。
命令:git rm --cached [file name]
命令作用:把檔案從暫存區撤回到工作區。
(4)提交檔案。
命令:git commit -m '本次提交的說明'
命令作用:提交操作就通過命令將Git暫存區中的檔案快照永久性地寫入到本地版本庫中。
3、補充:新增多個檔案到暫存區
有兩種方式:
git add
命令後新增多個檔案,檔案之間使用空格分隔。git add
命令後使用萬用字元*
指定多個檔案。
示例:
# 1.檢視工作區、暫存區狀態
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.java # 檔名為紅色
test.java # 檔名為紅色
xyj-sha_hs.py # 檔名為紅色
xyj-sun_wk.py # 檔名為紅色
xyj-zhu_bj.py # 檔名為紅色
nothing added to commit but untracked files present (use "git add" to track)
# 2.新增多個檔案到暫存區
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add hello.java test.java
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: hello.java # 檔名為綠色
new file: test.java # 檔名為綠色
Untracked files:
(use "git add <file>..." to include in what will be committed)
xyj-sha_hs.py # 檔名為紅色
xyj-sun_wk.py # 檔名為紅色
xyj-zhu_bj.py # 檔名為紅色
# 3.使用萬用字元新增多個檔案到暫存區
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add xyj*.py
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: hello.java # 檔名為綠色
new file: test.java # 檔名為綠色
new file: xyj-sha_hs.py # 檔名為綠色
new file: xyj-sun_wk.py # 檔名為綠色
new file: xyj-zhu_bj.py # 檔名為綠色
4、補充:提交操作未寫備註
如果你在執行git conmit
提交命令的時候,並沒有寫-m
資訊,這時會啟動文字編輯器,以便輸入本次提交的說明。
預設的提交訊息包含最後一次執行git status
的輸出,放在註釋行裡,如下圖:
另外開頭還有一空行,供你輸入提交說明。你完全可以去掉這些註釋行,不過留著也沒關係,多少能幫你回想起這次更新的內容有哪些。
如下:
會彈出一個視窗,一個vim
編輯器視窗:
說明:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Changes to be committed:
# modified: readme.txt
#
Please enter the commit message for your changes. Lines starting
with '#' will be ignored, and an empty message aborts the commit.
對於你這次提交中修改的內容要進行說明,
以'#'開頭的行將被忽略,並且在第一行填寫說明資訊。Changes to be committed: modified: readme.txt
readme.txt
的修改已被Git追蹤到。
進行提交說明的補充:
儲存並退出後,提交成功,如下圖:
總結:當提交操作的說明內容比較多,或者需要寫的比較詳細的時候,可以使用這種方式提交。
5、補充:從工作區直接提交到版本庫
儘管使用暫存區域的方式,可以準備好要提交的細節,但有時候這麼做略顯繁瑣。
Git提供了一個跳過使用暫存區域的方式,只要在提交的時候,給git commit
命令加上-a
選項,Git就會自動把所有已經跟蹤過的檔案,暫存起來一併提交,從而跳過git add
步驟。
命令:git commit -a
示例:
(1)先檢視當前工作目錄中的檔案狀態。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean
可以看到非常的乾淨。
(2)我們建立兩個檔案。
一個檔案是新增檔案test.txt
,此前沒有被Git追蹤過。
兩個檔案是readme.txt
,已被Git追蹤,我們將該檔案變成已修改狀態。
# 1.新建test.txt
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "hello test" > test.txt
# 2.修改readme.txt檔案
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "hello git v666" >> readme.txt
# 3.檢視工作目錄中的檔案狀態
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: readme.txt # 已修改狀態,未在暫存區
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt # 未追蹤狀態
no changes added to commit (use "git add" and/or "git commit -a")
(3)提交到Git版本庫中。
我們直接使用git commit -a -m
命令直接執行提交操作,看看會發生什麼情況。
# 提交
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git commit -a -m 'test -a'
[master 1b0de31] test -a
1 file changed, 1 insertion(+)
# 檢視工作目錄檔案狀態
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt # 未追蹤狀態
nothing added to commit but untracked files present (use "git add" to track)
我們可以看到,未被追蹤狀態的檔案,不能直接從工作區直接提交到版本庫,使用-a
選擇也不可以。