Git GUI 的基本操作

寫在前面的話:
這並不是一篇講解Git原理和命令的文章,本文旨在分享通過鼠標點擊GUI界面使用Git實現日常開發的版本管理。儘管僅使用少量的Git命令就能夠滿足日常版本管理,一上手就展示命令行還讓是不少想了解Git的人望而卻步。
看完這篇文章,你應該對Git的工作流程有基本的瞭解,並能夠使用Git GUI進行日常開發的版本管理。

準備:

一、Git GUI基本操作

1、版本庫初始化

gitpractise文件夾就變成了Git可以管理的倉庫,目錄下多了一個.git文件夾,此目錄是Git用於管理版本庫的,不要擅自改動裏面的文件,這樣會破壞Git倉庫。(.git文件夾默認是隱藏的,如果你沒有看到它,不要慌。)

在想要初始化的文件夾的空白處右鍵,選擇Git GUI Here,新建版本庫時文件夾會自動定位到當前文件夾。

2、GUI說明

工作區:列出有改動的文件
暫存區:存放將要提交到版本庫的文件,工作區中修改完成的文件應將放入暫存區
差異區:在工作區/暫存區選擇文件會顯示出改動前後的具體信息
提交的說明:提交時寫入改動的相關說明

Rescan:掃描出改動的文件,顯示在工作區。GUI並不會實時更新對倉庫的修改,需要點擊Rescan按鈕重新掃描。
Stage Changed:將工作區中所有文件放入暫存區。
Sign off:在提交的說明後面附加上當前git賬號的信息。多人協作時方便看到提交的編輯者。
Commit:將暫存區的文件提交到版本庫。
Push:推送到遠程版本庫。

3、新增文件

讓我們從新增一個文件開始,在gitpractise中新建hello.txt文件,然後點擊Rescan,可以看到hello.txt出現在工作區

對提交過的文件的修改是可以撤銷的,通過Commit -> Revert Changes

4、暫存

Commit -> Stage To Commit

這裏的操作是將選定的單個文件放入暫存區(快捷鍵是ctrl+t)。多個文件可以按住shift/ctrl進行選定。暫存全部直接點擊Stage Changed

4.1、撤銷暫存

提交前還想再編輯。Commit -> Unstage From Commit

也可以不撤銷暫存,直接編輯,再次暫存,效果是一樣的。

5、提交

6、版本節點和回滾

6.1、 查看版本節點

爲了演示版本的回滾,我對hello.txt做了修改並提交。此時我們有兩個版本。
Repository -> Visualize master's history

6.2、回滾,回到第一個版本

reset有三種模式:soft | mixed | hard ,不同的模式對工作區、暫存區和版本庫的影響不同,具體如下圖:

soft:回退版本提交歷史,暫存區和工作區不變。

mixed:回退版本提交歷史,暫存區文件與該版本一致,工作區不變。

hard:回退版本提交歷史,暫存區和工作區文件與該版本一致。

二、分支與合併

在版本節點和回滾中,我可以看到,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裏,這個分支叫主分支,即master分支。
在GIt中,可以以任一分支爲原型再創建分支,此時新的分支與原型擁有一致的版本庫,對新分支的任何改動都不會影響原型分支,新舊分支開始維護各自的版本。
最後,可以通過合併分支,將不同分支的內容結合到一起。
分支讓每個人擁有獨立的工作空間,而合併能將所有人的工作成果歸一,協同工作因此變得簡單、高效。

1、創建一個分支

Branch -> Create

新建並切換工作倉庫至branch1,接下來就可以修改、暫存、提交。跟在master分支的操作是一樣的。

分支的切換:
Branch -> Checkout

切換前要保持當前分支的工作區和暫存區是乾淨的(clean),即沒有未提交的修改。如果你修改了一半,這時由於各種原因,需要切換到其他分支工作,可以使用git stash命令,它會記錄當前工作區和暫存區中文件的狀態,把工作現場“儲藏”起來,這樣工作區就是乾淨的了。再次回到此分支,使用git stash pop命令,就能恢復現場。Git GUI不提供相關的操作,需要去Git bash執行這兩個命令。

2、合併分支

爲了演示,我還以master爲原型新建了分支branch2
(1)、branch1中修改hello.txt的第一行爲hi~world.,並新增文件world.txt
(2)、branch2中修改hello.txt的第一行爲work hard pls.

我們看一下現在的分支情況:

2.1、合併branch1到master

在合併之前,我們思考一下,由於branch1是在master版本上進行了修改,我們期望的合併結果應該是master中hello.txt第一行被修改爲hi~world.,並新增文件world.txt,接下來就是驗證。
首先切換到主分支master,然後點擊菜單欄的 Merge -> Local Merge

結果符合預期。再看一下此時的分支情況:

可以看到此時 master跟branch1指向了同一個版本節點。

2.2、合併branch2到master

接下來我們合併branch2到master。

合併失敗!讓我們仔細看一下錯誤提示:

提示框中有一句:Automatic merge failed,即自動合併失敗。我們與合併branch1的提示做一下對比

我們看到了Fast-forward的提示。 由於master 是要併入的branch1分支的直接上游,master順着走下去可以到達branch1分支,這種單線的歷史分支不存在任何需要解決的分歧,合併過程稱爲快進(Fast forward)。

而合併了branch1之後的master不再是branch2的直接上游,此時合併branch2就會要求解決分歧(如果存在的話)。所以纔有了Automatic merge failed: fix conflicts and then commit the result的提示。(自動合併失敗,請解決衝突後再提交)。Git將文件中有衝突的地方都寫入文件,同時顯示在差異區,我們可以按圖索驥,到指定文件中刪除不想要的部分,然後暫存,再次提交。(這裏的暫存是不可以通過點擊Stage Changed實現的)

branch1和branch2完成了它們的使命,可以通過Branch -> Delete進行刪除,需要注意一點:不能刪除工作中的分支。

差異區的查看
前面的"-1,2"分成三個部分:減號表示改動前的文件,"1"表示第1行,"2"表示連續2行。合在一起,就表示下面是修改前的文件從第1行開始的連續2行。同樣的,"+1,6"表示變動後,成爲改動後的文件從第1行開始的連續6行。

三、遠程協作

現在,我們以一個託管在GitHub上的ASP.NET MVC項目來進行遠程協作演示。

1、 克隆遠程倉庫到本地

2、忽略文件

細心的你會發現根目錄下有一個名爲.gitignore的文件。它用於定義忽略規則(ignore rules),每一次暫存/提交之前,Git會根據該文件內容忽略指定文件/文件夾。 在實際的開發過程中,總有一些情況是我們不想讓Git跟蹤某些文件的。Git提供三種忽略文件的方式

2.1、創建局部.gitignore文件

在倉庫的根目錄下創建.gitignore文件,忽略規則僅作用於當前倉庫。一般情況下,應該將.gitignore文件提交到版本庫,這樣就可以與克隆項目倉庫的人共享忽略規則

Github上維護有一個適用於多種現流行的操作系統/環境/開發語言的官方推薦.gitignore文件的項目。還可以通過gitignore.io生成對應操作系統/開發語言/IDE的.gitignore文件。

2.2、創建全局.gitignore文件

我們還可以通過全局.gitignore文件將忽略規則應用到本機上所有Git倉庫。
(1)、git config --global core.excludesfile ~/.gitignore_global。
(2)、在用戶根目錄下創建.gitignore文件。

2.3、顯式排除出倉庫

如果不想使用.gitignore文件,還可以通過往倉庫根目錄下.git/info/exclude文件添加忽略規則達到忽略本倉庫指定文件/文件夾的目的。

1、如果一個文件已經添加到版本庫,之後添加對應的忽略規則到gitignore/exclude文件並不會生效。這種情況下,需要通過以下命令先解除對文件的跟蹤:
git rm --cached FILENAME
2、全局和局部的.gitignore文件會共同作用。

3、pull和push

pull和push分別表示從遠程倉庫獲取信息和推送本地更新到遠程倉庫兩個操作。

多人協作時,大家都會往master分支上推送各自的修改,小夥伴已經向master推送了他的提交,而碰巧我們對同樣的文件作了修改,並試圖推送:

得到錯誤提示:

推送失敗,因爲小夥伴的最新提交和我們的推送存在衝突,解決辦法也很簡單,Git已經提示我們,先用git pull把最新的提交從master抓下來,然後,在本地合併,解決衝突,在Git GUI中的Pull操作需要兩個步驟來完成:

1、獲取遠程倉庫版本記錄 Remote -> Fetch

2、本地合併Merge -> Local Merge

解決衝突後,再推送:

寫在最後的話
如果你認真看完了整篇文章,那麼Git日常的操作應該能夠使用Git GUI完成了,這也是本文的初衷。Git作爲當前最強大的版本管理工具(沒有之一)擁有的功能比本文寫到的要多得多,然而很多功能是通過命令行實現的,GUI只是封裝了一部分常用的功能,方便入門和日常操作。如果你想深入瞭解Git,這是Git的官方網站

THE END

原文鏈接

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