天天看點

Git知識總覽(六) Git分支中的遠端操作實踐

前幾篇部落格陸陸續續的講了好多關于Git操作的内容, 其中在上篇部落格聊了《Git中的merge、rebase、cherry-pick以及互動式rebase》,本篇部落格仍然也不例外,不過本篇部落格的主題是關于git的遠端操作的。依照之前部落格的風格,我們依然依托于LearningGitBranch中的相關内容來探究一下Git的遠端操作。今天這篇部落格算是Git系列部落格的結尾了。

一、PUSH到遠端

1、将本地的Merge操作推送給遠端

下方左邊是我們的git分支的初始狀态,我們從master分支上分别建立了三個不同的分支side1、side2、side3。并且在每個分支上都有新的送出。右邊是遠端的狀态,在我們從遠端Clone後,團隊的其他小夥伴往遠端提了一個新的送出C8。

  

Git知識總覽(六) Git分支中的遠端操作實踐

下方就是我們經過遠端代碼的pull,然後在本地進行merge, 最終進行push的效果。下方我們就通過具體的分支操作來達到下方的目标。

Git知識總覽(六) Git分支中的遠端操作實踐

上述的目标其實很簡單,就是将上述的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到遠端進行共享。

使用場景:上述操作在日常開發中經常用到,比如你本地針對不同的問題開出了不同的分支,然後在各個分支上分别做了不同的事情。當這些事情做完時需要合并到主分支,和其他同僚進行共享。在合入之前,需要先拉取遠端master分支的最新代碼,然後在本地進行合并,合并後在進行push操作。有的小夥伴文為啥要拉取最新的代碼,因為拉取代碼是為了保證本地的master分支與遠端一緻,并在代碼merge時極有可能會産生沖突,需要我們在本地merge的過程中将這些沖突進行解決掉,然後再push到遠端。

Git知識總覽(六) Git分支中的遠端操作實踐

2、推送遠端前的rebase操作

上面代碼合并時的分支看上去是非常亂的,我們可以不選擇使用merge指令來合并分支,可以使用rebase-變基操作。變基操作在之前的部落格中已經介紹過了,本篇部落格就不做具體講解了,下方隻是對rebase操作的具體實踐。

下方的内容也是比較簡單的,就是使用rebase操作來代替上方的merge操作。下方的截圖就是我們要完成的目标。此處的目标與上述merge操作後的結果對比一下,不難發現,下方經過rebase操作後的分支并沒有那麼雜亂,而是成線性的操作,push到遠端的話,看上去就好像是基于master分支來開發的一樣。

Git知識總覽(六) Git分支中的遠端操作實踐

下方的操作也是比較簡單的,就是将上一部分的merge操作換成了rebase操作,不過在執行rebase操作時要區分好一個分支變基到那個分支上。下方是具體操作的描述:

git fetch: 首先投過git fetch抓取遠端的代碼。
git rebase: 然後就一系列的git rebase操作,先使用git rebase o/master side1 操作将side1分支上的送出内容變基到o/master分支上,然後是将side2變基到side1上,接着是将side3變基到side2上。最後是将master分支變基到side3上,這一步操作也就是快速前進的操作,目的是将master分支指向目前rebase後的分支的最後一個送出上。
git push: 最後就是通過git push将整理好的分支push到遠端。遠端的分支看上去就是一個線性的送出了,而不會保留我們本地之前的那三個分支的具體送出。

通過merge和rebase操作都能完成我們将本地的代碼進行合并到主分支然後push到遠端的目标,但是其具體整理分支方式不同。rebase使得分支的合并更線性一些,而merge操作就使的分支的合并呈現二維的一個結構。

至于rebase好還是merge好,個人感覺merge的優點是能更好的儲存你的操作曆史,而rebase則會丢棄掉一些操作曆史。但是merge的缺點是多個分支進行合并時,其合并曆史看上去會比較繁雜,而rebase操作顯得就比較幹淨利索。至于在合并分支時時用merge還是rebase,沒有具體的要求。

Git知識總覽(六) Git分支中的遠端操作實踐

二、遠端分支追蹤和push

1、分支的遠端追蹤

首先我們來看一個示例:

首先我們通過 git clone 操作克隆了一份代碼,然後在本地的master分支上通過 git checkout -b bugfix01分支并切換到該分支上,并且在遠端通過fakeTeamwork操作建立了一個遠端送出。
接着我們在bugfix01分支上做了一次送出。
此時此刻我們在bugfix01分支上想拉取遠端最新的代碼,執行了git pull操作。從下方來看,是不被允許的,并給出了提示 “bugfix01 is not a remote tracking branch! I dont know where to push”,大概意思是bugfix01沒有一個正在追蹤的遠端分支,不知道從哪個分支上進行拉取。
Git知識總覽(六) Git分支中的遠端操作實踐

接下來要做的事情是在建立分支就給我們建立的新的分支指定一個追蹤的遠端分支,這樣就可在我們建立的新分支上來pull遠端分支中的内容了。下方是具體操作:

首先我們通過 git checkout -b bugfix02 o/master 指令建立并切換到了bugfix02上,後邊所添加的o/master分支名就是bugfix02所要追蹤的遠端分支。
因為我們為bugfix02添加和遠端追蹤分支,我們就可以在bugfix02分支上通過 git pull 指令來拉取 o/master分支上的相關内容。具體如下所示。
Git知識總覽(六) Git分支中的遠端操作實踐

 2、push到遠端

接下來我們要聊到就是在目前操作分支上将将本地的其他分支push到遠端。具體操作如下所示:

下方的操作我們事先将HEAD指針指向了C0。
然後執行 git push origin foo 操作将foo分支上的内容push到遠端,push完畢後,本地的o/foo分支也會跟着變動,如下所示。
同樣,使用 git push origin master 指令,可以将本地的master分支上的送出push到遠端的master分支,并修改本地的遠端o/master分支的指向。

因為在該操作中foo追蹤了遠端的o/foo分支,是以可以push到遠端的foo分支上。

Git知識總覽(六) Git分支中的遠端操作實踐

上面将相關分支同步到遠端所對應的分支上,比如将本地的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分支上。

上述冒号後方的分支名所對應的就是遠端的分支。

Git知識總覽(六) Git分支中的遠端操作實踐

三、抓取遠端操作

1. fetch origin

上面示範了push origin 的操作,接下來我們可以看一下fetch origin的操作。

我們可以通過 git fetch origin foo:master 來将遠端的master分支上的内容同步到本地的foo分支上,當然這個foo分支也要有對應的追蹤遠端的。
Git知識總覽(六) Git分支中的遠端操作實踐

我們還可以通過fetch origin或者push origin來建立和删除相關分支。下方左圖是我們要完成的目标,右圖是目前現狀。我們要做的是通過 fetch origin 指令來删除foo分支,然後也是通過fetch origin指令來建立一個barf分支。

Git知識總覽(六) Git分支中的遠端操作實踐

接下來我們就通過相關指令來完成上述目标:

首先我們通過git push origin :foo 操作來删除遠端的foo分支。
然後在通過git fetch origin :bar操作來建立一個本地的bar分支。

具體如下所示:

Git知識總覽(六) Git分支中的遠端操作實踐

四、本地分支跟蹤遠端其他分支

本關其實就是在拉取分支時順便建立一個追蹤遠端相關分支的本地分支。下方截圖就是本關要完成的任務。圖左邊是我們要完成的目标,右邊是現有狀态。要完成最終的目标,需執行下方的幾步:

目前狀态是在master分支上有一個新的送出C4并未push到遠端, 若要達到目标,需要在master分支上線pull遠端的bar分支,然後在pull遠端的master分支。
在pull遠端分支時,分别建立了不同的分支跟蹤遠端的分支。下方會有具體的指令操作。
Git知識總覽(六) Git分支中的遠端操作實踐

下方是具體的指令操作:

首先通過 git pull origin bar:foo 指令拉取遠端的 bar 分支,在拉取遠端分支後,在本地建立一個 foo 分支來跟蹤遠端的bar分支。
然後再通過 git pull origin master:side 指令拉取遠端的 master 分支,然後建立一個本地side分支來跟蹤遠端的master分支。

最終操作如下所示:

Git知識總覽(六) Git分支中的遠端操作實踐

陸陸續續的也聊了好多git相關操作,git相關内容先到這兒,以後如果還有其他内容再做補充。

作者:青玉伏案

出處:http://www.cnblogs.com/ludashi/

本文版權歸作者和共部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。

收履歷:某網際網路公司,招聘iOS/Android靠譜工程師,入職後,可内部聯系樓主,有小禮品贈送,有意者可郵箱投遞履歷:[email protected]