誰說用 Git 一定要用命令行?試試 SourceTree 吧

來源:https://juejin.im/post/59bc944d51882519777c5e07

前言

作為使用Sourcetree大於3年的我,已熟知git的每一個功能,並靈活運用利用git解決開發中各式各樣的場景問題,我也曾多次在公司內部不同小組間分享Sourcetree使用經驗,接下來給大家分享下這款工具吧。

本文可能是目前網上最全的一篇可視化使用git工具Sourcetree文章。

可能對於很多開發來說,只要搞懂git的push、pull、解決一些簡單的衝突命令就好了,事實上git的功能十分強大,而通過背命令很難熟記每個邏輯。當然不同的ide開發環境都有各種各樣的git插件,操作方法各不相同,不如直接學個跨平臺,不受ide限制的git管理工具Sourcetree。不管你做java,還是python、Android都可以使用。

介紹

官方介紹如下:

A free Git client for Windows and MacSourcetree simplifies how you interact with your Git repositories so you can focus on coding. Visualize and manage your repositories through Sourcetree's simple Git GUI.

一款強大的Windows和Mac的免費Git客戶端sourcetree簡化你如何與你的Git存儲庫使您可以專注於編碼。可視化和通過Sourcetree簡單的git GUI管理你的知識庫。

一點坑

下載www.sourcetreeapp.com/這款軟件是免費的,但是需要註冊,登錄授權。

一些場景

我大概把一些git高階的應用場景和大家分享下:

  1. 一個項目含開發分支、集成分支、集成分支(穩定版)、生產環境分支等
  2. 一個項目含base分支,按功能分配到各個分支,各個開發管理(十來個分支),集成分支、生產環境分支。(那十來個分支內只有自己模塊的代碼)
  3. 一款產品一個主分支,對於每個公司實施均有個性化需求,且需求很難以插件形式實施,或者插件形式也需要各種個性化修改的插件,則對於每個項目實施對應每個分支。

這裡,我先簡單描述這幾種使用場景,具體內容,後面會逐步介紹。


欣賞下git分支:

誰說用 Git 一定要用命令行?試試 SourceTree 吧

常見用法

本文會綜合Windows環境和mac環境一起講,但在兩個平臺下界面或名詞還是有少許差異,本文會盡可能的說明。

添加倉庫

mac下從url克隆

誰說用 Git 一定要用命令行?試試 SourceTree 吧

git remote add orgin http://10.10.100.6:3000/sl/shaolei.git

windows下從url克隆

誰說用 Git 一定要用命令行?試試 SourceTree 吧

抓取、獲取分支信息

抓取(mac下的名字)獲取(Windows下的名字)指獲取服務端git庫的變更信息,比如落後幾個版本,超前幾個版本,我們平常多人協作的項目,提交代碼前需要先獲取一下,如果服務端有新的提交,再拉取下別人的更改,可以減少代碼衝突。(

菜單欄

拉取代碼

誰說用 Git 一定要用命令行?試試 SourceTree 吧

$ git fetch
$ git merge orgin/master

我先將界面分為 菜單欄左側欄文件欄變更欄

底部欄以方便下文介紹。

直接點擊菜單欄的拉取按鈕即可將遠程代碼變更拉取到本地。

提交代碼:

1.正常提交

  1. 首先將未暫存的文件選中,點擊後面的暫存所選;或者直接點擊暫存所有。(文件欄
  2. 在下方文本框輸入本次代碼變動的說明。(底部欄
  3. sourcetree默認不會推送到遠程倉庫,打勾立即推送變更到origin。(底部欄
  4. 點提交即可(如果沒有打勾立即推送變更到遠程,還需手動點擊菜單欄的推送)
誰說用 Git 一定要用命令行?試試 SourceTree 吧


這裡我模擬一些變更,隨便改點代碼,然後保存,再次回到提交界面。

誰說用 Git 一定要用命令行?試試 SourceTree 吧


變更欄會包含本次所有變更,其中+代表本次增加行;-代表本次刪除行;前面2個行號依次代碼變更前行號,變更後的行號。


為了保證代碼變更儘可能的少,我們需要丟棄一些無意義的變更,如153行的刪了一行

,隨後又增加了一行
,造成這種現象一般是代碼格式化或者不小心增加了某些空格等不可見字符導致,我們可以直接選中那2行,然後點擊上方的丟棄行。
誰說用 Git 一定要用命令行?試試 SourceTree 吧


需要注意的是,丟棄不等於刪除,丟棄所丟的東西是那一行的變更,比如是

+號,那麼丟掉代表不增加這一行,減號-同理丟的是不刪除這一行,也就是恢復這一行。
sourcetree會把所有的變更以區塊來分組,所以如果是整個區塊的變更都沒有意義,可直接丟棄整個塊,如圖:

誰說用 Git 一定要用命令行?試試 SourceTree 吧


隨後暫存所選提交(文件欄

暫存代碼

暫存和丟棄類似,是將代碼片段暫存到本地暫存區 以備提交,提交時所提交的代碼就是暫存區的代碼。
當我們某個功能已經實現了,但是又想優化一下代碼,可又擔心等會沒優化成功,此時的代碼丟失,如果沒有git之前,我們可能會備份一份代碼,這裡只需要暫存代碼即可。暫存後,正常修改,後續的變更會出現在未暫存文件中的變更欄中。

誰說用 Git 一定要用命令行?試試 SourceTree 吧


此時無論是丟棄,還是繼續暫存都是基於上次已暫存的文件。
當然,你也可以提交代碼,來實現類似功能。

1.解決衝突

當我和別人改了相同文件的相同行時,(大部分我們多人改變了一個文件,git都會幫我們處理掉,自動合併,但是當改變同一文件的相同行時,在拉取時就會有衝突)如圖

誰說用 Git 一定要用命令行?試試 SourceTree 吧


我們可以先將我們代碼貯藏起來(菜單欄),然後再拉取代碼,接著應用貯藏,應用後衝突的文件會顯示出來

$ git stash
誰說用 Git 一定要用命令行?試試 SourceTree 吧


這個時候,我們需要指定一個版本,比如是別人的版本為準,還是我的版本,隨後右鍵文件選擇 解決衝突使用我的版本(左側欄選擇文件狀態-》工作副本)

誰說用 Git 一定要用命令行?試試 SourceTree 吧


變更欄可以看到updated upstream 是別人改的版本,+====下面我改的版本。
如果遠程和本地都有問題,建議打開ide工具編輯後提交。

新開分支

在項目中,我們可能分為開發分支、集成分支、生成環境分支等,這時我們只需要在某個節點上右鍵選擇分支即可

誰說用 Git 一定要用命令行?試試 SourceTree 吧

誰說用 Git 一定要用命令行?試試 SourceTree 吧

推送分支

新開的分支不會在遠程顯示,所以需要將分支推送到遠程。

$ git push orgin 測試分支
誰說用 Git 一定要用命令行?試試 SourceTree 吧

切換分支

$ git checkout 3e1e7fc
誰說用 Git 一定要用命令行?試試 SourceTree 吧


需要切換到不通分支時,直接雙擊分支。

拉取遠程分支

和切換分支類似,雙擊遠程分支即可。

回滾提交

有些時候,我們提交的代碼有問題,需要回滾回去。

git revert *

回滾某次提交

將某次變更(在sourcetree裡是某個節點)右鍵選擇回滾提交。

誰說用 Git 一定要用命令行?試試 SourceTree 吧

回滾文件

誰說用 Git 一定要用命令行?試試 SourceTree 吧

回滾行

誰說用 Git 一定要用命令行?試試 SourceTree 吧

忽略文件

項目中,有一些文件夾是需要忽略,而不需要提交到倉庫裡,比如bin目錄下、target目錄下的文件。

誰說用 Git 一定要用命令行?試試 SourceTree 吧

誰說用 Git 一定要用命令行?試試 SourceTree 吧


這裡支持忽略單個文件、忽略所有擴展名、或略文件夾下的一切等。之後,我們不會看到這些文件變動。
需要說明的是忽略文件,只能忽略未跟蹤文件,如果已跟蹤文件(之前被提交過),需要先將這些文件刪除後,提交代碼庫,再次忽略文件。

合併分支

誰說用 Git 一定要用命令行?試試 SourceTree 吧


由圖中可以看出,我們的測試分支代碼落後master分支2個節點,我們可以在master分支上右鍵選擇合併到當前分支

誰說用 Git 一定要用命令行?試試 SourceTree 吧


當有衝突時,需要和上文中介紹的那樣解決衝突,然後提交;如果沒有衝突,需要手動點擊推送按鈕將合併後的變更提交到遠程

誰說用 Git 一定要用命令行?試試 SourceTree 吧

貯藏(暫存)代碼

$ git stash

上文已有介紹,主要指暫存所有變更,以便於應用暫存(windows下叫貯藏

審查文件

假設一個文件被不同的開發修改過,有段代碼需要找到修改人,我們可以右鍵審查文件查看每一行的作者。

$ git blame
誰說用 Git 一定要用命令行?試試 SourceTree 吧


效果如下:

誰說用 Git 一定要用命令行?試試 SourceTree 吧


右鍵某一行選擇查看詳細日誌 可以看到該次提交的說明。

查看文件變動歷史

我們時常需要查看某個文件變動的歷史,這裡我們可以右鍵查看文件的 變更歷史

$ git log 
誰說用 Git 一定要用命令行?試試 SourceTree 吧


點擊後效果如圖:

誰說用 Git 一定要用命令行?試試 SourceTree 吧

按文件打開歷史版本

有些時候,我們也需要查看文件的歷史版本,這裡可以選中節點後,選擇那個變更文件,右鍵 打開歷史版本

誰說用 Git 一定要用命令行?試試 SourceTree 吧


sourcetree會生成一個臨時文件(歷史版本),以供我們分析。

標籤的使用

我們有些時候需要給一個變更增加一個標籤,比如

穩定版1.0的標籤

git tag v1
$ git tag -d v1 //移除標籤
誰說用 Git 一定要用命令行?試試 SourceTree 吧


效果如下:

誰說用 Git 一定要用命令行?試試 SourceTree 吧

存檔

存檔指將當前版本打包成一個zip包。

誰說用 Git 一定要用命令行?試試 SourceTree 吧

檢出分支

檢出分支意思是將當前項目回到選中的版本,這樣我們可以很輕鬆回到任意一個版本,來編譯項目,或者檢查當時項目的問題。

誰說用 Git 一定要用命令行?試試 SourceTree 吧

其他

誰說用 Git 一定要用命令行?試試 SourceTree 吧

  1. 合併 一般是用於不通分支間,將某次提交的所有變更合併到當前分支。
  2. rebase、交互式變都是變基,主要是將遠程的這個分支名裡的標識改變,大部分場景用不到
  3. 重置到當前節點:這個功能蠻好用的,可以將目前的分支回滾到那一次的分支,然後將所有的文件變更顯示出來,相當於回到當時準備提交的時候(包含之後的所有變動)。
  4. 遴選 從不同的分支中檢出一個單獨的commit , 並把它和你當前的分支合併,類似於打補丁,例如,修復一個所有分支都有的bug這樣的場合可以適用。
$ git revert
$ git cherry-pick 4a1fd5
誰說用 Git 一定要用命令行?試試 SourceTree 吧

  1. 分支的拉取推:從遠程拉取
  2. 跟蹤分支:當未跟蹤時表示本地沒有和遠程建立分支的聯繫
  3. 重命名分支
  4. 刪除分支等

如何查看界面上的操作對應命令

誰說用 Git 一定要用命令行?試試 SourceTree 吧


設置後可以看到每部操作的git命令

誰說用 Git 一定要用命令行?試試 SourceTree 吧

一些良好的習慣

  1. 儘可能丟棄一些無意義的變更
  2. 儘可能按模塊分配開發人員任務
  3. 合併分支後需立刻解決掉衝突
  4. 減少單個文件內代碼變動的區塊
  5. 如果使用我的版本解決問題,需告知對方

場景 應用

篇幅有限,下次再續!

總結

通過本文介紹,可以解決平時90%以上的各個代碼提交問題,至於用什麼ide環境,那都不是事,使用ide開發工具打開sourcetree裡的項目即可。


作者:邵磊
鏈接:https://juejin.im/post/59bc944d51882519777c5e07
來源:掘金
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。


分享到:


相關文章: