當我們在多台電腦上開發一個項目的時候,需要經常修改提交內容並在另一台電腦上更新遠程最新的代碼,今天看了一下如何從遠程代碼倉庫獲取更新到本地,總結了一下網上的文章,采用如下的方式比較簡單。
當我們在多台電腦上或者多人共同開發一個項目的時候,遠程倉庫會不時地被修改,而自己也在不斷修改自己的本地倉庫,因此倉庫的遠程版本與本地版本勢必會導致不一致。比如A同學基於版本1修改了遠程倉庫並提交了,形成了版本2;B同學的本地倉庫是基於版本1的,並對版本1做了自己的修改,當B同學更新本地倉庫的時候會自動地將本地倉庫與遠端版本2倉庫合並,這個合並被期望能夠保護B同學基於版本1進行的一些修改。
這里說明這種情況下,Git的處理機制以及我們保護本地基於舊版本倉庫修改的內容的的應對措施。
方法一
查看遠程分支
使用如下命令可以查看遠程倉庫(我這里有一個origin倉庫)
$ git remote -v
origin git@github.com:username``/Animations``.git (fetch)``origin git@github.com: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出錯的時候可以解決沖突