寫在前面的話:
這並非一篇講解Git原理和命令的文章,本文旨在分享經過鼠標點擊GUI界面使用Git實現平常開發的版本管理。儘管僅使用少許的Git命令就可以知足平常版本管理,一上手就展現命令行還讓是很多想了解Git的人望而卻步。
看完這篇文章,你應該對Git的工做流程有基本的瞭解,並可以使用Git GUI進行平常開發的版本管理。
- git 2.19.1
- 遠程倉庫地址: https://github.com/FrankFrank...
- 完成git配置
gitpractise
文件夾就變成了Git能夠管理的倉庫,目錄下多了一個.git
文件夾,此目錄是Git用於管理版本庫的,不要擅自改動裏面的文件,這樣會破壞Git倉庫。(.git
文件夾默認是隱藏的,若是你沒有看到它,不要慌。)git
在想要初始化的文件夾的空白處右鍵,選擇 Git GUI Here,新建版本庫時文件夾會自動定位到當前文件夾。
工做區:列出有改動的文件
暫存區:存放將要提交到版本庫的文件,工做區中修改完成的文件應將放入暫存區
差別區:在工做區/暫存區選擇文件會顯示出改動先後的具體信息
提交的說明:提交時寫入改動的相關說明github
Rescan:掃描出改動的文件,顯示在工做區。GUI並不會實時更新對倉庫的修改,須要點擊Rescan按鈕從新掃描。
Stage Changed:將工做區中全部文件放入暫存區。
Sign off:在提交的說明後面附加上當前git帳號的信息。多人協做時方便看到提交的編輯者。
Commit:將暫存區的文件提交到版本庫。
Push:推送到遠程版本庫。bash
讓咱們重新增一個文件開始,在gitpractise
中新建hello.txt
文件,而後點擊Rescan,能夠看到hello.txt
出如今工做區工具
對提交過的文件的修改是能夠撤銷的,經過 Commit -> Revert Changes
Commit -> Stage To Commit網站
這裏的操做是將選定的單個文件放入暫存區(快捷鍵是ctrl+t)。多個文件能夠按住shift/ctrl進行選定。暫存所有直接點擊Stage Changedui
提交前還想再編輯。Commit -> Unstage From Commitspa
也能夠不撤銷暫存,直接編輯,再次暫存,效果是同樣的。
爲了演示版本的回滾,我對hello.txt
作了修改並提交。此時咱們有兩個版本。
Repository -> Visualize master's history操作系統
reset有三種模式:soft | mixed | hard ,不一樣的模式對工做區、暫存區和版本庫的影響不一樣,具體以下圖:命令行
soft:回退版本提交歷史,暫存區和工做區不變。
mixed:回退版本提交歷史,暫存區文件與該版本一致,工做區不變。
hard:回退版本提交歷史,暫存區和工做區文件與該版本一致。
3d
在版本節點和回滾中,我能夠看到,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裏,這個分支叫主分支,即master分支。
在GIt中,能夠以任一分支爲原型再建立分支,此時新的分支與原型擁有一致的版本庫,對新分支的任何改動都不會影響原型分支,新舊分支開始維護各自的版本。
最後,能夠經過合併分支,將不一樣分支的內容結合到一塊兒。
分支讓每一個人擁有獨立的工做空間,而合併能將全部人的工做成果歸一,協同工做所以變得簡單、高效。
Branch -> Create
新建並切換工做倉庫至branch1,接下來就能夠修改、暫存、提交。跟在master分支的操做是同樣的。
分支的切換:
Branch -> Checkout
切換前要保持當前分支的工做區和暫存區是 乾淨的(clean),即沒有未提交的修改。若是你修改了一半,這時因爲各類緣由,須要切換到其餘分支工做,可使用git stash命令,它會記錄當前工做區和暫存區中文件的狀態,把工做現場「儲藏」起來,這樣工做區就是乾淨的了。再次回到此分支,使用git stash pop命令,就能恢復現場。Git GUI不提供相關的操做,須要去Git bash執行這兩個命令。
爲了演示,我還以master爲原型新建了分支branch2
(1)、branch1中修改hello.txt
的第一行爲hi~world.,並新增文件world.txt
(2)、branch2中修改hello.txt
的第一行爲work hard pls.
咱們看一下如今的分支狀況:
在合併以前,咱們思考一下,因爲branch1是在master版本上進行了修改,咱們指望的合併結果應該是master中hello.txt第一行被修改成hi~world.,並新增文件world.txt
,接下來就是驗證。
首先切換到主分支master,而後點擊菜單欄的 Merge -> Local Merge
結果符合預期。再看一下此時的分支狀況:
能夠看到此時 master跟branch1指向了同一個版本節點。
接下來咱們合併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項目來進行遠程協做演示。
細心的你會發現根目錄下有一個名爲.gitignore
的文件。它用於定義忽略規則(ignore rules),每一次暫存/提交以前,Git會根據該文件內容忽略指定文件/文件夾。 在實際的開發過程當中,總有一些狀況是咱們不想讓Git跟蹤某些文件的。Git提供三種忽略文件的方式
.gitignore
文件在倉庫的根目錄下建立.gitignore
文件,忽略規則僅做用於當前倉庫。通常狀況下,應該將.gitignore
文件提交到版本庫,這樣就能夠與克隆項目倉庫的人共享忽略規則。
Github上維護有一個適用於多種現流行的操做系統/環境/開發語言的官方推薦.gitignore
文件的項目。還能夠經過gitignore.io生成對應操做系統/開發語言/IDE的.gitignore
文件。
.gitignore
文件咱們還能夠經過全局.gitignore
文件將忽略規則應用到本機上全部Git倉庫。
(1)、git config --global core.excludesfile ~/.gitignore_global。
(2)、在用戶根目錄下建立.gitignore
文件。
若是不想使用.gitignore
文件,還能夠經過往倉庫根目錄下.git/info/exclude
文件添加忽略規則達到忽略本倉庫指定文件/文件夾的目的。
一、若是一個文件已經添加到版本庫,以後添加對應的忽略規則到gitignore/exclude
文件並不會生效。這種狀況下,須要經過如下命令先解除對文件的跟蹤:
git rm --cached FILENAME
二、全局和局部的.gitignore
文件會共同做用。
pull和push分別表示從遠程倉庫獲取信息和推送本地更新到遠程倉庫兩個操做。
多人協做時,你們都會往master分支上推送各自的修改,小夥伴已經向master推送了他的提交,而碰巧咱們對一樣的文件做了修改,並試圖推送:
獲得錯誤提示:
推送失敗,由於小夥伴的最新提交和咱們的推送存在衝突,解決辦法也很簡單,Git已經提示咱們,先用git pull把最新的提交從master抓下來,而後,在本地合併,解決衝突,在Git GUI中的Pull操做須要兩個步驟來完成:
一、獲取遠程倉庫版本記錄 Remote -> Fetch
二、本地合併Merge -> Local Merge
解決衝突後,再推送:
寫在最後的話:
若是你認真看完了整篇文章,那麼Git平常的操做應該可以使用Git GUI完成了,這也是本文的初衷。Git做爲當前最強大的版本管理工具(沒有之一)擁有的功能比本文寫到的要多得多,然而不少功能是經過命令行實現的,GUI只是封裝了一部分經常使用的功能,方便入門和平常操做。若是你想深刻了解Git,這是Git的 官方網站。
THE END