『現學現忘』Git基礎 — 13、Git的基礎操作

繁華似錦Fighting發表於2022-04-21

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)

說明:

  1. Untracked files:readme.txt
    表示發現未追蹤的檔案readme.txt
  2. use "git add <file>..." to include in what will be committed
    表示對readme.txt檔案,你可以使用git add <file>命令,
    將新建檔案新增到暫存區。
  3. 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	# 檔名為綠色

說明:

  1. Changes to be committed: new file: readme.txt
    所做更改:新建了readme.txt檔案
  2. 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

重點說明最下面三行內容:

  1. master:表示master(主幹)分支。
  2. root-commitroot表示根,意思是該版本庫的第一次提交。
  3. e84b93b:提交操作的版本號概要。
  4. My first commit.new file readme.txt:本次提交的說明資訊。
  5. 1 file changed:一個檔案被修改。
  6. 1 insertions(+):增加了1行內容,+號表示增加,-號表示減少。
  7. create mode 100644 readme.txtreadme.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")

說明:

  1. Changes not staged for commit:modified: readme.txt
    readme.txt檔案被修改,但是沒有新增到暫存區
  2. 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
    是有一點差別的。
  3. use "git restore <file>..." to discard changes in working directory
    表示可以通過git restore <file>...命令,放棄工作目錄中檔案的更改。
    就是還原檔案。Git早期版本該命令為git checkout --<file>...
  4. 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	# 檔名為綠色

說明:

  1. Changes to be committed: modified: readme.txt
    readme.txt的修改已被Git追蹤到
  2. 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 ' ' 提交更新。

相關文章