1. 程式人生 > 實用技巧 >Git更新遠端倉庫程式碼到本地

Git更新遠端倉庫程式碼到本地

當我們在多臺電腦上開發一個專案的時候,需要經常修改提交內容並在另一臺電腦上更新遠端最新的程式碼,今天看了一下如何從遠端程式碼倉庫獲取更新到本地,總結了一下網上的文章,採用如下的方式比較簡單。

當我們在多臺電腦上或者多人共同開發一個專案的時候,遠端倉庫會不時地被修改,而自己也在不斷修改自己的本地倉庫,因此倉庫的遠端版本與本地版本勢必會導致不一致。比如A同學基於版本1修改了遠端倉庫並提交了,形成了版本2;B同學的本地倉庫是基於版本1的,並對版本1做了自己的修改,當B同學更新本地倉庫的時候會自動地將本地倉庫與遠端版本2倉庫合併,這個合併被期望能夠保護B同學基於版本1進行的一些修改。
這裡說明這種情況下,Git的處理機制以及我們保護本地基於舊版本倉庫修改的內容的的應對措施。

方法一

檢視遠端分支

使用如下命令可以檢視遠端倉庫(我這裡有一個origin倉庫)

$ git remote -v

origin  [email protected]:username``/Animations``.git (fetch)``origin  [email protected]:username``/Animations``.git (push)`

從遠端獲取最新版本到本地

使用如下命令可以在本地新建一個temp分支,並將遠端origin倉庫的master分支程式碼下載到本地temp分支

$ git fetch origin master:temp

remote: Counting objects: 18, ``done``.``remote: Compressing objects: 100% (6``/6``), ``done``.``remote: Total 11 (delta 3), reused 0 (delta 0)``Unpacking objects: 100% (11``/11``), ``done``.``From github.com:username``/Animations`` ``* [new branch]      master     -> temp``   ``c07bdc7..40f902d  master     -> origin``/master`

比較本地倉庫與下載的temp分支

使用如下命令來比較原生代碼與剛剛從遠端下載下來的程式碼的區別:

$ git diff temp

diff --git a/README.md b/README.md``deleted file mode ``100644``index 76699ed..``0000000``--- a/README.md``+++ /dev/``null``@@ -``1``,``6` `+``0``,``0` `@@``-Animations``-==========``-``。。。`

合併temp分支到本地的master分支

對比區別之後,如果覺得沒有問題,可以使用如下命令進行程式碼合併:

$ git merge temp

Updating c07bdc7..40f902d``Fast-forward`` ``README.md                                                  | 6 ++++++`` ``src``/cn/exercise/animations/MainActivity``.java | 4 ++--`` ``2 files changed, 8 insertions(+), 2 deletions(-)`` ``create mode 100644 README.md`

刪除temp分支

如果temp分支不想要保留,可以使用如下命令刪除該分支:

$ git branch -d temp

Deleted branch temp (was 40f902d).`

如果該分支的程式碼之前沒有merge到本地,那麼刪除該分支會報錯,可以使用git branch -D temp強制刪除該分支。

方法二

git pull的作用是,從遠端庫中獲取某個分支的更新,再與本地指定的分支進行自動merge。完整格式是:

$ git pull <遠端庫名> <遠端分支名>:<本地分支名>

比如,取回遠端庫中的develop分支,與本地的develop分支進行merge,要寫成:

git pull origin develop:develop

如果是要與本地當前分支merge,則冒號後面的<本地分支名>可以不寫。

git pull origin develop

通常,git會將本地庫分支與遠端分支之間建立一種追蹤關係。比如,在git clone的時候,所有本地分支預設與遠端庫的同名分支建立追蹤關係。也就是說,本地的master分支自動追蹤origin/master分支。因此,如果當前處於本地develop分支上,並且本地develop分支與遠端的develop分支有追蹤關係,那麼遠端的分支名可以省略:

git pull origin

其實,git pull 命令等同於先做了git fetch ,再做了git merge。即:

git fetch origin develop
git checkout develop
git merge origin/develop

或者

git fetch origin master:tmp
git diff tmp 
git merge tmp
git branch -d tmp

好多人不建議使用git pull,喜歡自己merge,以便萬一自動merge出錯的時候可以解決衝突