[Sourcetree] Git 版本控制詳解

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

準備

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

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

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

碼云測試項目

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

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

頂部工具欄

  • 提交(commit):提交改動到本地倉庫
  • 拉饶吓睢(pull):從遠程倉庫拉取文件/改動到本地
  • 推送(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è)都有三個點的按鈕河劝,可以對文件進行相應的操作:

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

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

WORKSPACE - 歷史

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

WORKSPACE - 搜索

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

分支 - 簡介

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

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

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

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

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

新建分支,方式一

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

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

分支 - 刪除分支

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


刪除分支

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

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

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

強制刪除
分支 - 切換分支

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

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

切換分支提醒

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

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

切換分支報錯

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

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

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

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

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

分支 - 合并分支

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


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

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

分支 - 回滾/重置

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


這里可以選擇,提交回滾梧兼,來回滾上次的提交/合并;
如果我們想之間回到某次提交智听,可以選擇該記錄羽杰,右鍵選擇 將 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 分支:選中該分支黎侈,右鍵選擇 檢出

檢出 遠程分支

這里我們可以重新命名分支察署,一般是和遠程分支一樣;復選框本地分支應跟蹤遠程分支 默認勾選即可峻汉,意思是新檢出的這個本地分支跟蹤這個遠程分支的狀態(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ā)中應該盡量避免。

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末融击,一起剝皮案震驚了整個濱河市筑公,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砚嘴,老刑警劉巖十酣,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異际长,居然都是意外死亡耸采,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門工育,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虾宇,“玉大人,你說我怎么就攤上這事如绸≈鲂啵” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵怔接,是天一觀的道長搪泳。 經(jīng)常有香客問我,道長扼脐,這世上最難降的妖魔是什么岸军? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任奋刽,我火速辦了婚禮,結(jié)果婚禮上艰赞,老公的妹妹穿的比我還像新娘佣谐。我一直安慰自己,他們只是感情好方妖,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布狭魂。 她就那樣靜靜地躺著,像睡著了一般党觅。 火紅的嫁衣襯著肌膚如雪雌澄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天仔役,我揣著相機與錄音掷伙,去河邊找鬼。 笑死又兵,一個胖子當著我的面吹牛任柜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沛厨,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宙地,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逆皮?” 一聲冷哼從身側(cè)響起宅粥,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎电谣,沒想到半個月后秽梅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡剿牺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年企垦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晒来。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钞诡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出湃崩,到底是詐尸還是另有隱情荧降,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布攒读,位于F島的核電站朵诫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏薄扁。R本人自食惡果不足惜剪返,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一瞎领、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧随夸,春花似錦、人聲如沸震放。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殿遂。三九已至诈铛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間墨礁,已是汗流浹背幢竹。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恩静,地道東北人焕毫。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像驶乾,于是被迫代替她去往敵國和親邑飒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

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