本文使用工具: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)容邪意;
暫存九妈,即 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诊赊,會在 分支 列表下新建一個名為 HEAD 的分支,但他不是一個真正的分支府瞄,當我們切換到其他分支的時候碧磅,這個分支會消失
點擊確定后,可以切換到當前 tag的工作區(qū):
如果我們在此基礎(chǔ)上做了改動遵馆,想要提交鲸郊,就需要新建一個分支進行,否則货邓,所有的改動秆撮,在切換分支后都會消失(該分支都消失了,改動肯定也不在了)换况;
可以看到职辨,當我們選中該 HEAD 分支時,版本記錄中會選中當前的記錄戈二,在此基礎(chǔ)上 右鍵舒裤,選擇 分支 即可檢出一個新的分支:
然后,將改動提交到這個分支觉吭,在切換回主分支時腾供,就可以將當前的改動合并到主分支了;
遠端
這里主要是顯示遠程倉庫的一些分支,我們只能檢出/拉取這些分支伴鳖,不能新增/刪除這些分支节值;
例如,我們檢出遠程的 testDev 分支:選中該分支黎侈,右鍵選擇 檢出
這里我們可以重新命名分支察署,一般是和遠程分支一樣;復選框本地分支應跟蹤遠程分支 默認勾選即可峻汉,意思是新檢出的這個本地分支跟蹤這個遠程分支的狀態(tài)贴汪;
點擊檢出后,在 分支 選項下休吠,就會有我們新檢出的這個分支
推送(push)
最后簡單說一下推送扳埂,當我們在本地完成開發(fā)后,想要推送到遠程倉庫瘤礁,點擊推送后:
默認情況下阳懂,本地分支跟蹤的哪個遠程分支,就默認推送到這個分支柜思,當然岩调,我們也可以點擊遠程分支那一列進行選擇,要提交到哪個遠程分支:
這里選擇將本地的 master 分支的改動赡盘,提交到遠程的 developer 分支号枕;
合并沖突
在我們合并代碼的時候,不可避免的會出現(xiàn)沖突的情況陨享;在我們拉取代碼的時候葱淳,默認會勾選 立即提交合并的改動;這時抛姑,如果有沖突赞厕,將拉取不下來,而且會爆錯定硝;這時去掉該勾選
拉取之后皿桑,會在文件狀態(tài),看的沖突的文件:
找到?jīng)_突文件后蔬啡,我們同樣有兩種選擇來解決沖突诲侮,一種是在Sourcetree中解決:
選中沖突的文件,右鍵選擇 啟動外部合并工具
這里也可以直接選擇 使用‘我的版本’解決沖突 或者選擇 使用‘他人版本’解決沖突星爪,但是一般都使用外面工具
這里會顯示該文件所有沖突的地方,可以使用右下方的 Actions 按鈕來選擇解決沖突的方式粉私;然后關(guān)閉顽腾,會提示你是否保存,選擇保存即可;
如果選擇了 Choose neither抄肖,需要手動在文件中刪除沖突的文件久信;
另一種,是在Xcode中解決:
根據(jù)沖突的文件名漓摩,在Xcode中找到該文件裙士,打開,會看到類似下面的錯誤信息:
根據(jù)自己的需要管毙,選擇刪除即可腿椎;
最后,將選擇后的結(jié)果夭咬,提交(commit)到本地版本控制啃炸!
這里在提交時,沖突文件目錄中會有一些備份文件卓舵,一般已經(jīng)不需要了南用,直接刪除即可!
沖突的情況很多掏湾,解決起來也是不同程度的復雜裹虫,開發(fā)中應該盡量避免。