[Sourcetree] Git 版本控制詳解

本文使用工具:Sourcetree 3.0 +
代碼托管平臺:碼云,也可以選擇 GitHub,Gitlab等

準備

一般情況下,我們會將我們的項目新建多個分支,來用于不同的目的:

  • master:一般是存放已發(fā)版的源碼,平時開發(fā)不動該版源碼
  • developer:開發(fā)中的源碼,平時的改動都提交到該分支,開發(fā)期的更改,版本控制一般都是在這個分支內(nèi)進行;
  • testDev(其他):如果項目還有其他的需求,也會新開一個分支來進行,比如某個功能的調(diào)研。。。

這里我在碼云上面創(chuàng)建了一個測試項目,添加了兩個分支:

碼云測試項目

然后使用 Sourcetree 克隆到本地進行相關(guān)的操作;

如下所示,是我們打開的一個倉庫:

頂部工具欄

  • 提交(commit):提交改動到本地倉庫
  • 拉?。╬ull):從遠程倉庫拉取文件/改動到本地
  • 推送(push):提交本地的文件/改動到遠程倉庫
  • 抓取:檢測遠程是否有更新,如果有變動會在拉取右上角出現(xiàn)數(shù)字角標
  • 分支:新建本地分支
  • 合并:合并本地分支
  • 貯藏:當我們想要保存某個狀態(tài)的內(nèi)容,可選擇貯藏;
  • 終端:打開電腦終端,可使用指令操作當前倉庫
  • 設(shè)置:可以配置倉庫提交代碼模版,遠程倉庫地址,遠程倉庫用戶名,版本控制忽略文件等

上面常用的是前三個;
左側(cè)工具欄:

  • WORKSPACE:當前本地文件的內(nèi)容/狀態(tài)
  • 分支(branch):本地的分支,這里只有主分支(master)、分支localDev,可以在上面的分支選項新建新的分支;
  • 標簽(tag):可以為不同的分支添加一些標簽
  • 遠端(remote):這里主要顯示遠程倉庫所有的分支,可根據(jù)需要檢索到本地追蹤
WORKSPACE - 文件狀態(tài)

當選中左側(cè)文件狀態(tài)的時候,中間會出現(xiàn)三塊區(qū)域:已暫存文件、未暫存文件、文件內(nèi)容;

文件狀態(tài) 詳情

暫存,即 add ,暫存之后,就可以點擊提交(commit),或者點擊下方的輸入框,輸入說明即可提交文件改動到本地倉庫;

在已暫存文件區(qū)的上面,有兩個倒三角的按鈕,其內(nèi)容分別如下圖所示

▲ 這里主要是選擇顯示哪些內(nèi)容,以及如何顯示;

▲ 這里主要是文件的排練方式;
主要提一下點開的那個列表,上半部分主要是文件的排列方式,下半部分是視圖的顯示方式,有三個選項:

  • 無暫存視圖:只有一個文件框,已暫存和未暫存的文件混合一起;
  • 靈活暫存視圖:上半部分是已暫存文件,下半部分是未暫存文件,文件時全部展開的;
  • 分體暫存視圖:也是上半部分是已暫存文件,下半部分是未暫存文件,區(qū)別是兩個框是分開可滑動的;

另外,可以看到,每個文件右側(cè)都有三個點的按鈕,可以對文件進行相應(yīng)的操作:

已暫存文件后可供的選項有:未暫存文件、移除文件、在 Finder 中顯示;

未暫存文件后面的選項有:暫存文件、丟棄文件、移除文件、忽略文件、在 Finder 中顯示;

WORKSPACE - 歷史

在這里可以選擇歷史提交記錄中各版本的文件內(nèi)容,如果是未提交的文件,和上面的內(nèi)容一樣;

WORKSPACE - 搜索

功能不用多說,可以搜索提交的版本等;

分支 - 簡介

這里主要是管理本地分支,可以進行分支的新建/切換/刪除/合并等;

在分支 master 左側(cè)有個圓圈的標識符,代表當前工作區(qū)所處的分支,默認是處在主分支;

選中某個分支,右鍵,會出現(xiàn)如下的選擇列表:

  • 檢出 xxx:切換當前分支到該分支
  • 合并 分支1 至 分支2:將分支1的更改合并到分支2
  • 將當前變更變基到 xxx(rebase):就是將該分支未更改前的文件基礎(chǔ)更改到某個版本
  • 推送到 origin/master(已跟蹤):將本地的變更推送到已跟蹤的遠程分支
  • 推送到:選擇要推送到的遠程分支
  • 跟蹤遠程分支:選擇要跟蹤的遠程分支,跟蹤后該本地分支會和跟蹤的遠程分支對比是否有改動
  • 與當前對比:選中的分支與當前分支的對比
  • 重命名...:重新命名分支
  • 刪除 xxx:刪除當前分支
  • 復(fù)制分支名字:復(fù)制分支名稱
  • 創(chuàng)建拉取請求...:抓取遠程分支
分支 - 新建分支

新建分支,可通過上方菜單欄的分支按鈕:

新建分支,方式一

這里輸入分支名稱,提交可以選擇提交記錄中的某個節(jié)點,點擊創(chuàng)建分支即可;

另一種方式,是選中某個提交的節(jié)點,右鍵,在彈出列表中選擇分支

分支 - 刪除分支

方式一
在新建分支的彈出框中,有刪除分支的選項,選擇后如下圖所示:


刪除分支

這里會顯示所有的分支:本地分支和遠程分支,選擇要刪除的分支,然后刪除即可;
下面有個復(fù)選框:忽略合并狀態(tài)強行刪除
如果是刪除還未合并改動到主分支的的分支,會有提示,如果勾選該項,無論是否合并,都會強行刪除;

方式二
或者選中該分支,右鍵,選擇 刪除 分支名稱,即可刪除!
如果此時該分支有沒有合并的改動,會報錯:

這里一般會將改動合并到主分支,如果不想要這些改動,可在刪除時,勾選 強制刪除 復(fù)選項:

強制刪除
分支 - 切換分支

在切換分支的時候,本地的倉庫內(nèi)容會隨之改變;如果是未提交的改動,將會帶入新切換的分支中;

在左側(cè)分支列表,雙擊某個分支,即可切換到該分支;需要注意的是,在切換分支的時候,要將當前分支所有的改動進行提交,否則切換時會有提示,當然,可以選擇忽略這些改動,強行切換:

切換分支提醒

如果勾選了復(fù)選框:放棄本地變更,在當前分支所做的改動都會丟失,這個功能要慎用,如果是沒必要保存的更改可以選擇放棄;
如果沒有勾選該復(fù)選框,本地的改動會帶到切換后的分支;是否需要提交,根據(jù)自身需求來決定,一般情況下,在某個分支做的改動,最好是提交到當前的分支;各個分支之間,在合并之前應(yīng)當相互獨立;

如果是報下面的錯誤,就需要將更改提交后,再進行切換了:

切換分支報錯

另外一種切換分支的方法是,選中待切換的分支,然后右鍵選擇檢出 分支名稱,即可將當前分支切換到該分支;

分支 - 本地分支跟蹤遠程分支

選中某個分支右鍵,會看到下圖所示的部分內(nèi)容,含有 已跟蹤 字樣的是標示當前本地分支對應(yīng)的遠程分支;

當跟蹤了某個遠程分支,該本地分支會和遠程分支做比較,文件改動的標示都是在該兩個分支間進行;

我們可以在 跟蹤遠程分支 中來切換本地分支要跟蹤的遠程分支,一般情況下,我們本地分支的名稱和遠程分支是一致的,分別跟蹤即可;當然,也可以隨意切換,但是不建議這么做;

分支 - 合并分支

在某個分支開發(fā)完成后,例如,我在branch1分支新建了一個文件,然后將所有的更改提交到該分支


然后,切換回主分支,此時會發(fā)現(xiàn)項目中沒有剛剛新建的文件;然后,選中剛剛的分支,右鍵,選中 合并branch1 至 master,如果沒有沖突即可將剛剛的改動合并到 master 分支

合并后,再去項目中查看,就會有剛剛新建的那個文件了;

分支 - 回滾/重置

如果我們某次合并后,版本出現(xiàn)了無法修復(fù)的問題,想要回滾/重置這次操作,可以在版本記錄中,選中某個提交記錄,然后右鍵:


這里可以選擇,提交回滾,來回滾上次的提交/合并;
如果我們想之間回到某次提交,可以選擇該記錄,右鍵選擇 將 master 重置到這次提交

分支 - 變更基

假設(shè)我們正在 branch1 分支進行開發(fā),這時有人提交了部分更改到遠程 master 分支,我們在本地 master 分支拉取了更新后,想要在此更新的基礎(chǔ)上繼續(xù)進行 branch1 的開發(fā),這時就需要將這些更新添加到 branch1 分支中;

切換回主分支,將遠程的更改拉取下來;
然后,切換到 branch1 分支;
選中 master 分支,右鍵,選擇 **將當前變更變基到 master

這時,可能會有沖突,根據(jù)提示解決一下即可!到此,就將更新合并到 branch1 分支中了;

標簽(Tag)- 新建

在我們的提交記錄中,對于某些比較重要的提交,我們可以使用 tag 來進行標記;選中某次提交,然后右鍵,選擇 標簽

點擊添加后,在左側(cè)的 標簽 一欄就會出現(xiàn)我們剛剛新建的 tag

標簽 - 檢出Tag

如果我們想要以某個 tag 為基礎(chǔ)進行一些操作,我們可以選擇 檢出 該tag:選中 tag ,右鍵,檢出 tag

或者直接雙擊該 tag:

檢出 tag

這里需要注意這個提示,我們檢出的 tag,會在 分支 列表下新建一個名為 HEAD 的分支,但他不是一個真正的分支,當我們切換到其他分支的時候,這個分支會消失

點擊確定后,可以切換到當前 tag的工作區(qū):

如果我們在此基礎(chǔ)上做了改動,想要提交,就需要新建一個分支進行,否則,所有的改動,在切換分支后都會消失(該分支都消失了,改動肯定也不在了);

可以看到,當我們選中該 HEAD 分支時,版本記錄中會選中當前的記錄,在此基礎(chǔ)上 右鍵,選擇 分支 即可檢出一個新的分支:

然后,將改動提交到這個分支,在切換回主分支時,就可以將當前的改動合并到主分支了;

遠端

這里主要是顯示遠程倉庫的一些分支,我們只能檢出/拉取這些分支,不能新增/刪除這些分支;

例如,我們檢出遠程的 testDev 分支:選中該分支,右鍵選擇 檢出

檢出 遠程分支

這里我們可以重新命名分支,一般是和遠程分支一樣;復(fù)選框本地分支應(yīng)跟蹤遠程分支 默認勾選即可,意思是新檢出的這個本地分支跟蹤這個遠程分支的狀態(tài);

點擊檢出后,在 分支 選項下,就會有我們新檢出的這個分支

推送(push)

最后簡單說一下推送,當我們在本地完成開發(fā)后,想要推送到遠程倉庫,點擊推送后:


推送

默認情況下,本地分支跟蹤的哪個遠程分支,就默認推送到這個分支,當然,我們也可以點擊遠程分支那一列進行選擇,要提交到哪個遠程分支:

選擇遠程分支g

這里選擇將本地的 master 分支的改動,提交到遠程的 developer 分支;

合并沖突

在我們合并代碼的時候,不可避免的會出現(xiàn)沖突的情況;在我們拉取代碼的時候,默認會勾選 立即提交合并的改動;這時,如果有沖突,將拉取不下來,而且會爆錯;這時去掉該勾選

拉取之后,會在文件狀態(tài),看的沖突的文件:

找到?jīng)_突文件后,我們同樣有兩種選擇來解決沖突,一種是在Sourcetree中解決:
選中沖突的文件,右鍵選擇 啟動外部合并工具

這里也可以直接選擇 使用‘我的版本’解決沖突 或者選擇 使用‘他人版本’解決沖突,但是一般都使用外面工具

屏幕快照 2019-01-02 下午3.38.58.png

這里會顯示該文件所有沖突的地方,可以使用右下方的 Actions 按鈕來選擇解決沖突的方式;然后關(guān)閉,會提示你是否保存,選擇保存即可;

如果選擇了 Choose neither,需要手動在文件中刪除沖突的文件;

另一種,是在Xcode中解決:
根據(jù)沖突的文件名,在Xcode中找到該文件,打開,會看到類似下面的錯誤信息:

根據(jù)自己的需要,選擇刪除即可;

最后,將選擇后的結(jié)果,提交(commit)到本地版本控制!
這里在提交時,沖突文件目錄中會有一些備份文件,一般已經(jīng)不需要了,直接刪除即可!

沖突的情況很多,解決起來也是不同程度的復(fù)雜,開發(fā)中應(yīng)該盡量避免。

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來。這樣一來,任何一處協(xié)同...
    __silhouette閱讀 16,196評論 5 147
  • Git 命令行學習筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 4,151評論 0 11
  • 一、基本概念: 注:對于git的分布式概念及其優(yōu)點,不重復(fù)說明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大廠offer閱讀 1,557評論 0 3
  • 春光盡賞早須還, 漸入迷途退已難。 蝶本戀花花不語, 香氛麗影惑愚貪。
    水波楊山閱讀 357評論 8 8
  • 現(xiàn)在你在哪里,如果我沒有跟你認識你也可以不會認識我了我們也不會是這樣的結(jié)局。 我夏雯是一個高中生在一個河邊認識了...
    v可樂閱讀 372評論 0 1

友情鏈接更多精彩內(nèi)容