1、Git最基礎的使用方式
(1)初始化本地版本庫
要對現有的某個專案開始使用Git管理,只需到此專案所在的根目錄,執行git init
命令即可。
準備一個新的Git本地版本庫:
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit
$ git init
Initialized empty Git repository in J:/git-repository/learngit/.git/
說明:初始化Git倉庫後,在當前目錄下會出現一個名為.git
的目錄,所有Git需要的資料和資源都存放在這個目錄中。
不過目前,僅僅是按照既有的結構框架,初始化好了Git倉庫中所有的檔案和目錄,但我們還沒有開始跟蹤管理專案中的任何一個檔案。
(2)檢視檔案的狀態
使用git status
命令進行檢視。
進入本地版本庫檢視工作區、暫存區中檔案的狀態。
# 執行`git status`命令
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
# 在主分支上工作
On branch master
# 尚無提交檔案,指的是本地庫中沒有提交過任何檔案。
No commits yet
# 無需提交(可建立/複製檔案並使用“git add”進行跟蹤)
# 無需提交指的是,暫存區中沒有任何可提交的檔案
# 追蹤檔案,就是讓Git管理該檔案。
nothing to commit (create/copy files and use "git add" to track)
(3)把檔案新增到暫存區
1)建立檔案後檢視工作區、暫存區中檔案的狀態。
我們在倉庫目錄中建立一個readme.txt
檔案後,在執行git status
命令。
# 建立readme.txt檔案
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ touch readme.txt
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ ll
total 0
-rw-r--r-- 1 L 197121 0 4月 4 00:38 readme.txt
# 檢視工作區、暫存區狀態
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
# 尚無提交檔案,指的是本地庫中沒有提交過任何檔案。
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
readme.txt # 檔名為紅色
nothing added to commit but untracked files present (use "git add" to track)
說明:
Untracked files:readme.txt
表示發現未追蹤的檔案readme.txtuse "git add <file>..." to include in what will be committed
表示對readme.txt檔案,你可以使用git add <file>
命令,
將新建檔案新增到暫存區。nothing added to commit but untracked files present (use "git add" to track)
表示你沒有新增任何內容到暫存區,但是存在未追蹤的檔案,
可使用“git add”命令進行追蹤。
2)將工作區的檔案新增到暫存區。
執行git add
命令,將readme.txt
檔案新增到暫存區。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add readme.txt
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
說明:
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
- 警告:
readme.txt
檔案中的換行符格式會被替換,CRLF替換LF。
在我們安裝Git的第8步時,所選擇的選項。這是Git底層的東西,不用我們控制的。- 但是該檔案在你的工作目錄中,還是儲存原始檔案的換行符格式。
- LF是Linux系統下的換行符,而CRLF是Windows系統下的換行符。由於我們的檔案建立於Linux系統下(Git Bash中建立),而儲存中Windows系統中,所以檔案中的行結束符要使用Windows下的CRLF格式換行。
- 以上兩行就是一個提示作用,對我們的操作沒有實際影響。
3)再次檢視工作區、暫存區狀態。
執行git status
命令檢視工作區、暫存區狀態。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: readme.txt # 檔名為綠色
說明:
Changes to be committed: new file: readme.txt
所做更改:新建了readme.txt檔案use "git rm --cached <file>..." to unstage
提示你可以適用使“git rm --cached <file> ...”
命令,
把檔案從暫存區中撤回到工作區。
總結:
只要在"Changes to be committed"
這行下面顯示的檔案,就說明是已暫存狀態。
如果此時提交,那麼該檔案此時此刻的版本,將被留存在歷史記錄中。
在git add
命令後面可以指明要跟蹤的檔案或目錄路徑。
如果是目錄的話,就說明要遞迴跟蹤該目錄下的所有檔案。(其實git add
命令的潛臺詞就是把目標檔案快照放入暫存區域,同時未曾跟蹤過的檔案標記為已跟蹤。)
4)將檔案從暫存區撤回到工作區。
執行git rm --cached
命令,將readme.txt
檔案從暫存區撤回到工作區。
並執行git status
命令檢視工作區、暫存區狀態。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git rm --cached readme.txt
rm 'readme.txt'
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
readme.txt # 檔名為紅色
nothing added to commit but untracked files present (use "git add" to track)
可以看到結果,readme.txt
檔案又成為了一個未被Git追蹤的檔案。
(4)把暫存區的內容提交到本地版本庫
當暫存區域已經準備妥當可以提交時,在此之前,請一定要確認還有什麼修改過的,或新建的檔案還沒有git add
到暫存區,否則提交的時候不會記錄這些還沒暫存起來的變化。
所以,每次準備提交前,先用git status
檢視下,需要提交的檔案是不是都已暫存起來了,然後再執行提交命令git commit -m '備註資訊'
。
1)將檔案新增到快取區並提交到本地版本庫。
將readme.txt
檔案加入到暫存區,並執行git commit -m '本次提交的說明'
,將readme.txt
檔案提交到本地版本庫。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add readme.txt
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git commit readme.txt -m 'My first commit.new file readme.txt'
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
[master (root-commit) e84b93b] My first commit.new file readme.txt
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
重點說明最下面三行內容:
master
:表示master
(主幹)分支。root-commit
:root
表示根,意思是該版本庫的第一次提交。e84b93b
:提交操作的版本號概要。My first commit.new file readme.txt
:本次提交的說明資訊。1 file changed
:一個檔案被修改。1 insertions(+)
:增加了1行內容,+
號表示增加,-
號表示減少。create mode 100644 readme.txt
:readme.txt
檔案建立模式為100644
,
100
代表regular file
(普通檔案),644
代表檔案許可權。
提示:提交時記錄的是放在暫存區域的快照。
即:每一次執行提交操作時,都是對專案作一次快照,以後可以回到這個狀態,或者與這個狀態進行比較。
2)將檔案提交到本地版本庫後工作區、暫存區狀態。
執行git status
命令檢視工作區、暫存區狀態。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
# 暫存區中沒有可提交的內容
# 工作目錄和本地版本庫是一樣的,沒有修改、新建等操作。
nothing to commit, working tree clean
3)修改檔案內容後檢視工作區、暫存區狀態。
修改readme.txt
檔案內容後,再執行git status
命令檢視工作區、暫存區狀態。
# 修改檔案內容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "git world" >> readme.txt
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat readme.txt
hello git world
git world
# 檢視工作區、暫存區狀態。
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 # 檔名為紅色
no changes added to commit (use "git add" and/or "git commit -a")
說明:
Changes not staged for commit:modified: readme.txt
readme.txt檔案被修改,但是沒有新增到暫存區use "git add <file>..." to update what will be committed
表示對readme.txt
檔案,你可以使用git add <file>
命令,
將檔案更新新增到暫存區。
和第(2)步的
use "git add <file>..." to include in what will be committed
是有一點差別的。use "git restore <file>..." to discard changes in working directory
表示可以通過git restore <file>...
命令,放棄工作目錄中檔案的更改。
就是還原檔案。Git早期版本該命令為git checkout --<file>...
。no changes added to commit (use "git add" and/or "git commit -a")
表示你沒有新增要提交的更改,
and/or
表示你可使用“git add”把變更檔案新增到暫存區,
在通過"git commit -a"提交到本地版本庫,
你也可以通過"git commit -a"直接把變更的檔案提交到本地版本庫。
注意使用git commit -a
命令用加檔名。
4)把修改後的檔案提交到暫存區。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add readme.txt
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
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)
modified: readme.txt # 檔名為綠色
說明:
Changes to be committed: modified: readme.txt
readme.txt的修改已被Git追蹤到use "git restore --staged <file>..." to unstage
你可以用git restore --staged <file>...
命令,
將檔案從暫存區撤出,但不會撤銷檔案的更改。
5)將修改過後的檔案提交到本地版本庫。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git commit readme.txt -m 'modified readme.txt'
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
[master e704334] modified readme.txt
1 file changed, 1 insertion(+)
可以看到,master
後沒有 (root-commit
)了,因為根提交只有一次。
新建立的檔案先新增到暫存區,然後新增到本地版本庫。
而已經提交到本地版本庫的檔案,修改了,可以按照上面操作,也可以直接提交到本地版本庫。
2、總結本文用到的Git命令
序號 | Git命令 | 說明 |
---|---|---|
1 | git init |
初始化本地版本庫。 |
2 | git status |
檢視當前工作區和暫存區檔案的狀態。 |
3 | git add <file>... |
可以將檔案新增到暫存區。 |
4 | git commit -m ' ' |
提交更新。 |