Git 學習筆記

1 版本控制

1.1 提交文件

在一個新的文件夾下可以使用 git init 將一個文件添加到 Git 中進行管理。

然後,可以使用 git add file_1 [file_2] ... 指令將文件添加到 Git 倉庫中。

添加了文件之後就可以提交文件了,這使用 git commit -m "提交內容備註" 指令。

如果需要查看 Git 當前到狀態,則可以使用 git status 指令。這個指令會返回倉庫當前的狀態,比如哪些文件被做了修改,但是不會顯示出具體修改了哪些內容。除了查看修改了哪些文件,當我們使用 git add 將文件添加到 Git 到之後也可以再次執行這個命令,它將告訴我們有哪些文件將要被提交。總之,它能夠顯示出我們 Git 當前到狀態。如果想要查看文件被修改了哪些內容,那麼我們可以使用 git diff readme.md 命令。

一般我們隨時使用 git status 查看 Git 當前到狀態,如果發生了改變,就使用 git diff 查看具體做了哪些修改。

1.2 版本回退

我們可以使用 Git 進行版本控制。在對版本進行回退之前,我們需要知道每個提交版本對版本號。這可以通過 git log 指令得到。

然後,就是回退到指定到版本,可以通過下面到指令 git reset --hard commit_id。這裏的 commit_id 是某次提交的版本號。通常,我們可以使用 HEAD 表示當前到版本號。用 HEAD^ 表示上一個版本號,HEAD^^ 表示上兩個版本號,HEAD-100 表示上第 100 個版本號。在 Git 當中,HEAD 是一個指向當前版本的指針。進行版本回退的時候,本質上也就是指針的位置發生了變化。

假如我們從版本 A 回退到了上一版本 B 之後又希望回到 A 的時候只要使用 commit id 執行上述指令就可以了。但如果我們已經回退到了 B,再使用 git log 是不會顯示 A 的提交記錄到。此時,可以使用 git reflog。它將顯示所有的提交記錄,可以在該命令到輸出中找到 A 的 commit id

1.3 工作區與暫存區

當使用 git init 指令初始化了 Git 倉庫的時候嗎,Git 會爲我們創建一個隱藏的 .git 文件夾。它叫做 Git 的版本庫。而當前目錄中除了這個隱藏的文件夾之外的其他文件夾,也就是我們文件相關的文件夾叫做工作區。Git 的版本庫又分成暫存區和分支。默認地,當我們初始化代碼倉庫的時候會默認創建一個 master 分支。

我們項目當中所有的文件默認都是放在工作區的。當一個文件被修改,並且使用 git add 之後,它就被添加到了暫存區。然後當我們最終使用 git commit 提交之後,它才被添加到了分支上面。

所以,當使用 git commit 進行提交的時候,提交的是暫存區的修改。如果工作區的內容沒有使用 git add 添加到暫存區,那麼它是無法被提交的。

1.4 撤銷修改

版本回退包括兩個部分:工作區版本回退和暫存區版本回退。

如果文件只在工作區做了修改,也就是修改了,但是沒有使用 git add 添加到暫存區,那麼我們可以使用 git checkout -- <file> ... 命令來撤銷工作區的修改。這裏的 -- 很重要,不然就成了切換分支的操作。這裏的根據有些類似於 SVN 中的 revert 操作。

如果已經把文件添加到了暫存區,那麼可以使用 git reset HEAD <file> ... 將暫存區的修改撤銷掉。

以上撤銷操作都是在本地修改還沒有被提交到遠程倉庫中的前提下進行的。

1.5 刪除文件

可以使用 rm <file> 指令從文件系統中刪除一個文件,然後使用 git status 指令查看當前的狀態,將會顯示出存在一個文件被刪除。

如果要從 Git 倉庫中刪除一個文件則可以使用 git rm <file> ... 命令。這種刪除操作作用在暫存區。使用 git commit -m "message" 命令之後這個文件就被從代碼倉庫移除了。

至於恢復操作則可以使用上面的撤銷操作。

2 分支管理

2.1 分支的基本操作

  1. 列出當前所有的分支:git branch
  2. 切換到指定的分支:git checkout <name>
  3. 創建分支:git branch <name>
  4. 創建並切換到指定的分支:git checkout -b <name>
  5. 將指定的分支合併到當前到分支:git merge <name> -m "message"
  6. 刪除指定到分支:git branch -d <name>
  7. 查看 Git 提交路線到圖表:git log --graph

2.2 合併衝突

一個暫存區對應多個分支,如果一個文件被在分支 A 上面添加到了緩存區,在 B 上面被提交,那麼這個文件最終將會被添加到分支 B 上面。

如果兩個文件在合併到時候發生了衝突,那麼在合併到時候會提示 “自動合併失敗”。此時到解決辦法是通過 git status 查看衝突到文件。然後打開衝突到文件,通過文本編輯到形式對文本進行修改得到期望到結果。然後通過 git add 等操作將合併到結果添加到倉庫並提交。

相比於使用文本編輯修改衝突,更推薦使用 VS Code 來解決衝突,因爲它有高亮提示。

2.3 --no-ff

在合併分支到時候使用 git merge --no-ff -m "message" <branch_name> 的形式。也就是禁用 Fast Forward 的意思。它的好處是,以下面的提交記錄爲例:

| Author: WngShhng <[email protected]>
| Date:   Sun Jun 9 18:44:37 2019 +0800
| 
|     change rm2
|   
*   commit 4ef755bb364b75b8b132f58be4b3ab6b7aa71356
|\  Merge: b8af794 d5b488d
| | Author: WngShhng <[email protected]>
| | Date:   Sun Jun 9 18:39:35 2019 +0800
| | 
| |     merge from new
| | 
| * commit d5b488d25752f06c97309e6891da601b222cc8bc
|/  Author: WngShhng <[email protected]>
|   Date:   Sun Jun 9 18:35:13 2019 +0800
|   
|       change rm2.md
| 

這裏我們進行了兩次合併,從下到上,第一次使用的是 --no-ff 模式,第二次沒有使用,並且合並過來的分支都只做了一次提交,並且它們在合併之後都被刪除了。那麼,第一次的時候,這裏存在一個 merge 的 commit,而第二次的時候沒有提交記錄。這將會導致我們無法判斷那一次的修改記錄是因爲分支合併還是因爲在 master 上面做了修改之後提交的。

2.4 保存工作現場

假如我們在 dev 分支開發,而突然需要修復某個 bug,此時原來的工作仍然有部分未完成。我們希望保存當前的工作狀態,然後創建一個新的分支,修復 bug 之後在恢復到之前到工作現場。此時,我們可以通過 git stash 保存當前到工作現場。注意這裏所謂到工作現場是指工作區的現場。如果是 dev 分支上面已經被提交到修改是不會被存儲到工作現場裏面到。

當我們修復完了問題並且 merge 到主分支上面之後再切換回 dev 分支。然後,我們可以使用 git dash list 查看有哪些可用到工作區。然後可以使用 $ git stash apply stash@{0} 指令來恢復到指定到工作區。這種恢復方式不會同時刪除這個工作區,你需要再次調用 git stash drop 來刪除。一般我們可以使用 git stash pop 來彈出工作區,這樣可以恢復到指定到工作區的同時將其刪除。

3 遠程倉庫

3.1 添加遠程庫

只需要在本地執行 git remote add origin <url> 即可。這裏的 origin 是遠程庫的名字。然後使用 git push -u origin <master_name> 就可以將本地名爲 master_name 的分支的內容提交到遠程 origin 倉庫。使用 git pull 將遠程倉庫中的代碼拉到本地。

然後,可以使用 git remote 查看遠程倉庫的狀態,如果需要更多的信息可以使用 git remote -v 查看更詳細的信息。

3.2 與遠程倉庫交互

如果已經存在一個遠程倉庫,那麼我們可以使用 git clone <url> 來把遠程到倉庫克隆到本地。

上面這種克隆的方式只是將遠程倉庫中的 master 分支克隆了下來。如果我們需要克隆遠程倉庫中的某個非 master 分支呢?假如我們需要使用遠程倉庫的 dev 分支,那麼我們可以使用 git checkout -b dev origin/dev 來完成。顯然這裏在本地創建了一個名爲 dev 的分支,並且其對應的遠程倉庫是 origin 中的 dev 分支。

在做完了我們的修改之後可以使用 git push origin dev 來將本地當前分支的修改提交到遠程的 dev 分支。這裏需要注意的一個問題是,如果遠程沒有叫做 dev 的分支,那麼上述推送指令將會在遠程創建一個名爲 dev 的分支。

最後

如果對哪個指令的含義不是很清楚,可以隨時使用 git -h 或者 git --help 來查看把幫助,使用 git command -h 或者 git command --help 來查看某條指令的幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章