天天看點

Git入門總結(一)基本指令

目錄

    • 0. Git的安裝
    • 1. 建立本地倉庫
    • 2. `add`和`commit`
    • 3. `status`
    • 4. `log`
    • 6. `reset`
    • 7. 找回本地庫删除的檔案
    • 8. 找回暫存區删除的檔案
    • 9. `diff`指令

Git這個東西,你說不會吧,但是平時也能用,你說很會吧,但是好多東西不太明晰,這次必須好好總結總結!将知識體系穩固住!

Git入門總結(一)基本指令

0. Git的安裝

省略

1. 建立本地倉庫

  1. 建立檔案夾:
    Git入門總結(一)基本指令
  2. 打開Git,

    Git Bash Here

    Git入門總結(一)基本指令
  3. 檢視Git版本:
    [email protected] MINGW64 /e/code/GitResp
    $ git --version
    git version 2.30.0.windows.2
               
  4. 設定Git使用者名:
  5. 設定郵箱:
  6. 本地倉庫的初始化操作:
    [email protected] MINGW64 /e/code/GitResp
    $ git init
    Initialized empty Git repository in E:/code/GitResp/.git/
               
    生成隐藏檔案:
    Git入門總結(一)基本指令
  7. 檢視

    .git

    檔案夾:
    Git入門總結(一)基本指令
    .git目錄下的本地庫相關的子目錄和子檔案不要删除,不要胡亂修改。

2.

add

commit

Git入門總結(一)基本指令

先建立一個檔案,demo.txt:

Git入門總結(一)基本指令

将檔案送出到暫存區

git add demo.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git add demo.txt
           

将檔案從暫存區放入本地庫

git commit -m "注釋"

[email protected] MINGW64 /e/code/GitResp (master)
$ git commit -m "這是第一次送出,建立了一個demo.txt"
[master (root-commit) db44fb0] 這是第一次送出,建立了一個demo.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 demo.txt
           

3.

status

status

是檢視工作區和暫存區的狀态的指令。

[email protected] MINGW64 /e/code/GitResp (master)
$ git status
On branch master
nothing to commit, working tree clean
           

上面的内容顯示,沒有東西要送出。

我們建立一個demo2.txt, 再次執行該指令檢視:

Git入門總結(一)基本指令
[email protected] MINGW64 /e/code/GitResp (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        demo2.txt

nothing added to commit but untracked files present (use "git add" to track)
           

我們可以看到,上面顯示,有

untracked files:

,就是未追蹤的檔案:demo2.txt,還提醒我們使用git add 來添加到追蹤。

然後我們将demo2.txt添加到暫存區, 再次檢視status:

[email protected] MINGW64 /e/code/GitResp (master)
$ git add demo2.txt demo2.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   demo2.txt
           

再次送出:

[email protected] MINGW64 /e/code/GitResp (master)
$ git commit -m "這是第二次送出,添加了demo2.txt"
[master 73799af] 這是第二次送出,添加了demo2.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 demo2.txt
           

檢視狀态:

[email protected] MINGW64 /e/code/GitResp (master)
$ git status
On branch master
nothing to commit, working tree clean
           

我們在檔案demo2.txt裡面添加一些内容:

Git入門總結(一)基本指令

檢視狀态

git status

[email protected] MINGW64 /e/code/GitResp (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:   demo2.txt

no changes added to commit (use "git add" and/or "git commit -a")
           

提示我們可以使用add來更新,有檔案已經被修改了。

這個時候需要我們重新添加,再次檢視狀态:

[email protected] MINGW64 /e/code/GitResp (master)
$ git add demo2.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   demo2.txt
           

然後我們再commit一次,檢視狀态:

[email protected] MINGW64 /e/code/GitResp (master)
$ git commit -m "第三次送出,修改了demo2.txt"
[master 26c58cd] 第三次送出,修改了demo2.txt
 1 file changed, 1 insertion(+)

[email protected] MINGW64 /e/code/GitResp (master)
$ git status
On branch master
nothing to commit, working tree clean
           

4.

log

我們可以使用

git log

來檢視日志:

[email protected] MINGW64 /e/code/GitResp (master)
$ git log
commit 26c58cddfbdabb0c1f466420d71ed8e80540b9e5 (HEAD -> master)
Author: veejaLiu <[email protected]>
Date:   Thu Jan 28 14:48:20 2021 +0800

    第三次送出,修改了demo2.txt

commit 73799afcf2ccf6588b817098041d0a88687095f0
Author: veejaLiu <[email protected]>
Date:   Thu Jan 28 14:32:52 2021 +0800

    這是第二次送出,添加了demo2.txt

commit db44fb0fa1fa65a039277c9c7071907d13b30293
Author: veejaLiu <[email protected]>
Date:   Thu Jan 28 14:18:20 2021 +0800

    這是第一次送出,建立了一個demo.txt
    
           
Git入門總結(一)基本指令

當我們進行多次操作的時候,

git log

指令不足以顯示全部的日志資訊,在下面會出現一個

:

Git入門總結(一)基本指令

這個時候我們按

空格鍵

就可以往下翻,按

B鍵

就可以往前退。

到尾頁的時候,就顯示

END

Git入門總結(一)基本指令

我們可以按

Q鍵

退出檢視,繼續我們的操作。

上面展示的資訊太過于啰唆,我們可以采取幾種簡潔的展示方式:

# 将一個版本的資訊放到一行裡面

[email protected] MINGW64 /e/code/GitResp (master)
$ git log --pretty=oneline
2bce1d3176c95f082f49fbbda3b8c2e9952e6866 (HEAD -> master) 删除了demo3~10.txt檔案
e5eca9f79628ef76570f568884bde59c62c3140c 添加了demo3~10的檔案
26c58cddfbdabb0c1f466420d71ed8e80540b9e5 第三次送出,修改了demo2.txt
73799afcf2ccf6588b817098041d0a88687095f0 這是第二次送出,添加了demo2.txt
db44fb0fa1fa65a039277c9c7071907d13b30293 這是第一次送出,建立了一個demo.txt
           
# 更簡潔的一行顯示

[email protected] MINGW64 /e/code/GitResp (master)
$ git log --oneline
2bce1d3 (HEAD -> master) 删除了demo3~10.txt檔案
e5eca9f 添加了demo3~10的檔案
26c58cd 第三次送出,修改了demo2.txt
73799af 這是第二次送出,添加了demo2.txt
db44fb0 這是第一次送出,建立了一個demo.txt
           
# reflog指令 一行顯示
# 多了 HEAD@{數字}資訊:
#       這個數字的含義是指針回到目前的曆史版本需要走的步數。

[email protected] MINGW64 /e/code/GitResp (master)
$ git reflog
2bce1d3 (HEAD -> master) HEAD@{0}: commit: 删除了demo3~10.txt檔案
e5eca9f HEAD@{1}: commit: 添加了demo3~10的檔案
26c58cd HEAD@{2}: commit: 第三次送出,修改了demo2.txt
73799af HEAD@{3}: commit: 這是第二次送出,添加了demo2.txt
db44fb0 HEAD@{4}: commit (initial): 這是第一次送出,建立了一個demo.txt
           

6.

reset

我們可以看到我們的版本記錄,目前的版本為

2bce1d3

我們在最近的版本中,删除了demo3~10的檔案,如果我們想恢複,這個時候應該怎麼辦?

[email protected] MINGW64 /e/code/GitResp (master)
$ git reflog
2bce1d3 (HEAD -> master) HEAD@{0}: commit: 删除了demo3~10.txt檔案
e5eca9f HEAD@{1}: commit: 添加了demo3~10的檔案
26c58cd HEAD@{2}: commit: 第三次送出,修改了demo2.txt
73799af HEAD@{3}: commit: 這是第二次送出,添加了demo2.txt
db44fb0 HEAD@{4}: commit (initial): 這是第一次送出,建立了一個demo.txt
           

我們需要使用

git reset

指令:

# git reset --hard 索引号

[email protected] MINGW64 /e/code/GitResp (master)
$ git reset --hard e5eca9f
HEAD is now at e5eca9f 添加了demo3~10的檔案
           

我們可以再次檢視日志:

[email protected] MINGW64 /e/code/GitResp (master)
$ git reflog
e5eca9f (HEAD -> master) HEAD@{0}: reset: moving to e5eca9f
2bce1d3 HEAD@{1}: commit: 删除了demo3~10.txt檔案
e5eca9f (HEAD -> master) HEAD@{2}: commit: 添加了demo3~10的檔案
26c58cd HEAD@{3}: commit: 第三次送出,修改了demo2.txt
73799af HEAD@{4}: commit: 這是第二次送出,添加了demo2.txt
db44fb0 HEAD@{5}: commit (initial): 這是第一次送出,建立了一個demo.txt
           

我們看到,

HEAD -> master

指向的節點已經變成了e5eca9f對應的版本了。

我們甚至可以在檔案夾裡面看到,那幾個檔案又神奇的回來了。

Git入門總結(一)基本指令
Git入門總結(一)基本指令

reset還有其他的參數,

  • 其中上面使用的

    --hard

    參數的含義是,當我們的本地庫檔案改變的時候,工作區和暫存區的内容也随之回退或者前進。這一個參數也是我們使用的最多的。
  • mixed

    參數:本地庫改變的時候,暫存區随之改變,但是工作區不變。
  • --soft

    :本地庫改變的時候,暫存區和工作區都不改變。

7. 找回本地庫删除的檔案

我們建立一個檔案Test2.txt,

并将它add到暫存區當中,

再将它送出到本地庫。

[email protected] MINGW64 /e/code/GitResp (master)
$ git add Test2.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git commit -m "add Test2.txt"
[master da8d40b] add Test2.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 Test2.txt
           

删除工作區中的Test2.txt:

Git入門總結(一)基本指令

将删除的操作同步到暫存區:

[email protected] MINGW64 /e/code/GitResp (master)
$ git add Test2.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    Test2.txt
           

将删除的操作同步到本地庫:

[email protected] MINGW64 /e/code/GitResp (master)
$ git commit -m "删除Test2.txt"
[master 6e9fc2f] 删除Test2.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 Test2.txt

           

檢視日志:

[email protected] MINGW64 /e/code/GitResp (master)
$ git reflog
6e9fc2f (HEAD -> master) HEAD@{0}: commit: 删除Test2.txt
da8d40b HEAD@{1}: commit: add Test2.txt
e5eca9f HEAD@{2}: reset: moving to e5eca9f
2bce1d3 HEAD@{3}: commit: 删除了demo3~10.txt檔案
e5eca9f HEAD@{4}: commit: 添加了demo3~10的檔案
26c58cd HEAD@{5}: commit: 第三次送出,修改了demo2.txt
73799af HEAD@{6}: commit: 這是第二次送出,添加了demo2.txt
db44fb0 HEAD@{7}: commit (initial): 這是第一次送出,建立了一個demo.txt

           

找回檔案,也就是回退版本:

[email protected] MINGW64 /e/code/GitResp (master)
$ git reflog
6e9fc2f (HEAD -> master) HEAD@{0}: commit: 删除Test2.txt
da8d40b HEAD@{1}: commit: add Test2.txt
e5eca9f HEAD@{2}: reset: moving to e5eca9f
2bce1d3 HEAD@{3}: commit: 删除了demo3~10.txt檔案
e5eca9f HEAD@{4}: commit: 添加了demo3~10的檔案
26c58cd HEAD@{5}: commit: 第三次送出,修改了demo2.txt
73799af HEAD@{6}: commit: 這是第二次送出,添加了demo2.txt
db44fb0 HEAD@{7}: commit (initial): 這是第一次送出,建立了一個demo.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git reset --hard da8d40b
HEAD is now at da8d40b add Test2.txt

           

8. 找回暫存區删除的檔案

先删除檔案,并且添加到暫存區:

[email protected] MINGW64 /e/code/GitResp (master)
$ ll
total 1
-rw-r--r-- 1 veeja 197121  0 Jan 28 16:13 Test2.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 14:12 demo.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo10.txt
-rw-r--r-- 1 veeja 197121 10 Jan 28 14:36 demo2.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo3.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo4.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo5.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo6.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo7.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo8.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo9.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ rm Test2.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git add Test2.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    Test2.txt
           

這個時候我們後悔了,想恢複暫存區的資料,其實跟剛才一樣,使用–hard參數,恢複本地庫版本就行了:

[email protected] MINGW64 /e/code/GitResp (master)
$ git reflog
da8d40b (HEAD -> master) HEAD@{0}: reset: moving to da8d40b
6e9fc2f HEAD@{1}: commit: 删除Test2.txt
da8d40b (HEAD -> master) HEAD@{2}: commit: add Test2.txt
e5eca9f HEAD@{3}: reset: moving to e5eca9f
2bce1d3 HEAD@{4}: commit: 删除了demo3~10.txt檔案
e5eca9f HEAD@{5}: commit: 添加了demo3~10的檔案
26c58cd HEAD@{6}: commit: 第三次送出,修改了demo2.txt
73799af HEAD@{7}: commit: 這是第二次送出,添加了demo2.txt
db44fb0 HEAD@{8}: commit (initial): 這是第一次送出,建立了一個demo.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git reset --hard da8d40b
HEAD is now at da8d40b add Test2.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ ll
total 1
-rw-r--r-- 1 veeja 197121  0 Jan 28 16:20 Test2.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 14:12 demo.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo10.txt
-rw-r--r-- 1 veeja 197121 10 Jan 28 14:36 demo2.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo3.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo4.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo5.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo6.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo7.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo8.txt
-rw-r--r-- 1 veeja 197121  0 Jan 28 15:49 demo9.txt

           

9.

diff

指令

建立一個Test3.txt:

Git入門總結(一)基本指令

添加并送出:

[email protected] MINGW64 /e/code/GitResp (master)
$ git add Test3.txt Test3.txt

[email protected] MINGW64 /e/code/GitResp (master)
$ git commit -m "add Test3.txt"
[master 063032b] add Test3.txt
 1 file changed, 1 insertion(+)
 create mode 100644 Test3.txt
           

在Test3.txt中增加一些内容:

Git入門總結(一)基本指令

接下來,我們使用diff指令,比對檔案的不同:

[email protected] MINGW64 /e/code/GitResp (master)
$ git diff Test3.txt
diff --git a/Test3.txt b/Test3.txt
index 90929f7..30c52e9 100644
--- a/Test3.txt
+++ b/Test3.txt
@@ -1 +1,2 @@
-aaaaaaaaaaaaa
\ No newline at end of file
+aaaaaaaaaaaaa
+bbbbbbbbbbbbbbbbbbbbbbbb
\ No newline at end of file
           
Git入門總結(一)基本指令

也可以使用

git diff [曆史版本] [檔案名]

來比較暫存區和工作區中的内容。

Git入門總結(一)基本指令