Git知识总览(六) Git分支中的远程操作实践
前幾篇博客陸陸續(xù)續(xù)的講了好多關于Git操作的內(nèi)容, 其中在上篇博客聊了《Git中的merge、rebase、cherry-pick以及交互式rebase》,本篇博客仍然也不例外,不過本篇博客的主題是關于git的遠程操作的。依照之前博客的風格,我們依然依托于LearningGitBranch中的相關內(nèi)容來探究一下Git的遠程操作。今天這篇博客算是Git系列博客的結(jié)尾了。
一、PUSH到遠端
1、將本地的Merge操作推送給遠端
下方左邊是我們的git分支的初始狀態(tài),我們從master分支上分別創(chuàng)建了三個不同的分支side1、side2、side3。并且在每個分支上都有新的提交。右邊是遠端的狀態(tài),在我們從遠端Clone后,團隊的其他小伙伴往遠端提了一個新的提交C8。
?
下方就是我們經(jīng)過遠端代碼的pull,然后在本地進行merge, 最終進行push的效果。下方我們就通過具體的分支操作來達到下方的目標。
?
上述的目標其實很簡單,就是將上述的side1、side2、side3分支合入到master分支,然后再push到遠端。下方是完成目標的具體操作。
- git pull: 因為要合入到master分支,所有先我們通過 checkout 命令切換到master分支,然后通過 pull 命令獲取到遠端master分支上的所有提交。
- git merge: 接下來就是在 master分支上一系列的merge操作了,最終side1、side2、side3的分支都會合入到master分支。
- git push: 然后通過git push 操作將本地合并好的master分支push到遠端進行共享。
使用場景:上述操作在日常開發(fā)中經(jīng)常用到,比如你本地針對不同的問題開出了不同的分支,然后在各個分支上分別做了不同的事情。當這些事情做完時需要合并到主分支,和其他同事進行共享。在合入之前,需要先拉取遠端master分支的最新代碼,然后在本地進行合并,合并后在進行push操作。有的小伙伴文為啥要拉取最新的代碼,因為拉取代碼是為了保證本地的master分支與遠端一致,并在代碼merge時極有可能會產(chǎn)生沖突,需要我們在本地merge的過程中將這些沖突進行解決掉,然后再push到遠端。
?
2、推送遠端前的rebase操作
上面代碼合并時的分支看上去是非常亂的,我們可以不選擇使用merge命令來合并分支,可以使用rebase-變基操作。變基操作在之前的博客中已經(jīng)介紹過了,本篇博客就不做具體講解了,下方只是對rebase操作的具體實踐。
下方的內(nèi)容也是比較簡單的,就是使用rebase操作來代替上方的merge操作。下方的截圖就是我們要完成的目標。此處的目標與上述merge操作后的結(jié)果對比一下,不難發(fā)現(xiàn),下方經(jīng)過rebase操作后的分支并沒有那么雜亂,而是成線性的操作,push到遠端的話,看上去就好像是基于master分支來開發(fā)的一樣。
?
下方的操作也是比較簡單的,就是將上一部分的merge操作換成了rebase操作,不過在執(zhí)行rebase操作時要區(qū)分好一個分支變基到那個分支上。下方是具體操作的描述:
- git fetch: 首先投過git fetch抓取遠端的代碼。
- git rebase: 然后就一系列的git rebase操作,先使用git rebase o/master side1 操作將side1分支上的提交內(nèi)容變基到o/master分支上,然后是將side2變基到side1上,接著是將side3變基到side2上。最后是將master分支變基到side3上,這一步操作也就是快速前進的操作,目的是將master分支指向目前rebase后的分支的最后一個提交上。
- git push: 最后就是通過git push將整理好的分支push到遠端。遠端的分支看上去就是一個線性的提交了,而不會保留我們本地之前的那三個分支的具體提交。
通過merge和rebase操作都能完成我們將本地的代碼進行合并到主分支然后push到遠端的目標,但是其具體整理分支方式不同。rebase使得分支的合并更線性一些,而merge操作就使的分支的合并呈現(xiàn)二維的一個結(jié)構。
至于rebase好還是merge好,個人感覺merge的優(yōu)點是能更好的保存你的操作歷史,而rebase則會丟棄掉一些操作歷史。但是merge的缺點是多個分支進行合并時,其合并歷史看上去會比較繁雜,而rebase操作顯得就比較干凈利索。至于在合并分支時時用merge還是rebase,沒有具體的要求。
?
?
二、遠端分支追蹤和push
1、分支的遠程追蹤
首先我們來看一個示例:
- 首先我們通過 git clone 操作克隆了一份代碼,然后在本地的master分支上通過 git checkout -b bugfix01分支并切換到該分支上,并且在遠端通過fakeTeamwork操作創(chuàng)建了一個遠端提交。
- 接著我們在bugfix01分支上做了一次提交。
- 此時此刻我們在bugfix01分支上想拉取遠端最新的代碼,執(zhí)行了git pull操作。從下方來看,是不被允許的,并給出了提示 “bugfix01 is not a remote tracking branch! I dont know where to push”,大概意思是bugfix01沒有一個正在追蹤的遠程分支,不知道從哪個分支上進行拉取。
?
接下來要做的事情是在創(chuàng)建分支就給我們創(chuàng)建的新的分支指定一個追蹤的遠程分支,這樣就可在我們創(chuàng)建的新分支上來pull遠端分支中的內(nèi)容了。下方是具體操作:
- 首先我們通過 git checkout -b bugfix02 o/master 命令創(chuàng)建并切換到了bugfix02上,后邊所添加的o/master分支名就是bugfix02所要追蹤的遠程分支。
- 因為我們?yōu)閎ugfix02添加和遠程追蹤分支,我們就可以在bugfix02分支上通過 git pull 命令來拉取 o/master分支上的相關內(nèi)容。具體如下所示。
?2、push到遠端
接下來我們要聊到就是在當前操作分支上將將本地的其他分支push到遠端。具體操作如下所示:
- 下方的操作我們事先將HEAD指針指向了C0。
- 然后執(zhí)行 git push origin foo 操作將foo分支上的內(nèi)容push到遠端,push完畢后,本地的o/foo分支也會跟著變動,如下所示。
- 同樣,使用 git push origin master 命令,可以將本地的master分支上的提交push到遠端的master分支,并修改本地的遠端o/master分支的指向。
因為在該操作中foo追蹤了遠端的o/foo分支,所以可以push到遠端的foo分支上。
?
上面將相關分支同步到遠端所對應的分支上,比如將本地的master分支push到遠端的o/master分支上。而接下來要做的事情是將本地的 a分支push到遠端的b分支上,將本地的b分支push到遠端的a分支上。具體導致如下所示:
- 下方我們通過 git push origin foo:master 操作將本地foo分支上的提交push到遠端的master分支上。
- 通過 git push origin master^:foo 操作,將本地的master分支之前的所有分支提交到遠端的foo分支上。
上述冒號后方的分支名所對應的就是遠端的分支。
?
?
三、抓取遠端操作
1. fetch origin
上面演示了push origin 的操作,接下來我們可以看一下fetch origin的操作。
- 我們可以通過 git fetch origin foo:master 來將遠端的master分支上的內(nèi)容同步到本地的foo分支上,當然這個foo分支也要有對應的追蹤遠端的。
?
我們還可以通過fetch origin或者push origin來創(chuàng)建和刪除相關分支。下方左圖是我們要完成的目標,右圖是目前現(xiàn)狀。我們要做的是通過 fetch origin 命令來刪除foo分支,然后也是通過fetch origin命令來創(chuàng)建一個barf分支。
?
接下來我們就通過相關命令來完成上述目標:
- 首先我們通過git push origin :foo 操作來刪除遠端的foo分支。
- 然后在通過git fetch origin :bar操作來創(chuàng)建一個本地的bar分支。
具體如下所示:
?
?
四、本地分支跟蹤遠端其他分支
本關其實就是在拉取分支時順便創(chuàng)建一個追蹤遠端相關分支的本地分支。下方截圖就是本關要完成的任務。圖左邊是我們要完成的目標,右邊是現(xiàn)有狀態(tài)。要完成最終的目標,需執(zhí)行下方的幾步:
- 當前狀態(tài)是在master分支上有一個新的提交C4并未push到遠端, 若要達到目標,需要在master分支上線pull遠端的bar分支,然后在pull遠端的master分支。
- 在pull遠端分支時,分別創(chuàng)建了不同的分支跟蹤遠端的分支。下方會有具體的命令操作。
?
下方是具體的命令操作:
- 首先通過 git pull origin bar:foo 命令拉取遠端的 bar 分支,在拉取遠端分支后,在本地創(chuàng)建一個 foo 分支來跟蹤遠端的bar分支。
- 然后再通過 git pull origin master:side 命令拉取遠端的 master 分支,然后創(chuàng)建一個本地side分支來跟蹤遠端的master分支。
最終操作如下所示:
?
陸陸續(xù)續(xù)的也聊了好多git相關操作,git相關內(nèi)容先到這兒,以后如果還有其他內(nèi)容再做補充。
總結(jié)
以上是生活随笔為你收集整理的Git知识总览(六) Git分支中的远程操作实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac下安装Mysql以及修改Mysql
- 下一篇: Twitter的分布式雪花算法 Snow