git使用筆記3:git pull&git merge git pull


1、用途:git fetch&git merge   git pull這兩條語句的作用是從遠程倉庫同步文件到本地;

2、區別

首先假設我們本地倉庫的 master 分支上 commit ID =1 ,orign/mastter中的commit ID =1 ;這時候遠程倉庫有人更新了github ogirn庫中master分支上的代碼,新的代碼版本號commit ID =2 ,那么在github上 orign/master的commitID=2,然后我們要更新代碼。

1. git fetch

  • 使用git fetch更新代碼,本地的庫中master的commitID不變,還是等於1。但是與git上面關聯的那個orign/master的commit ID變成了2。這時候我們本地相當於存儲了兩個代碼的版本號,我們還要通過merge去合並這兩個不同的代碼版本,如果這兩個版本都修改了同一處的代碼,這時候merge就會出現沖突,然后我們解決沖突之后就生成了一個新的代碼版本。
  • 這時候本地的代碼版本可能就變成了commit ID=3,即生成了一個新的代碼版本。

 相當於fetch的時候本地的master沒有變化,但是與遠程倉關聯的那個版本號被更新了,我們接下來就是在本地合並這兩個版本號的代碼。

2. git pull

  • 是用git pull更新代碼的話就比較簡單暴力了,看下圖。

使用git pull的會將本地的代碼更新至遠程倉庫里面最新的代碼版本。

總結:

不要用git pull,用git fetch和git merge代替它。

git pull的問題是它把過程的細節都隱藏了起來,以至於你不用去了解git中各種類型分支的區別和使用方法。當然,多數時候這是沒問題的,但一旦代碼有問題,你很難找到出錯的地方。看起來git pull的用法會使你吃驚,簡單看一下git的使用文檔應該就能說服你。

將下載(fetch)和合並(merge)放到一個命令里的另外一個弊端是,你的本地工作目錄在未經確認的情況下就會被遠程分支更新。當然,除非你關閉所有的安全選項,否則git pull在你本地工作目錄還不至於造成不可挽回的損失,但很多時候我們寧願做的慢一些,也不願意返工重來 。

3、實例

(1) git pull

git pull <遠程主機名> <遠程分支名>:<本地分支名>
//取回遠程主機某個分支的更新,再與本地的指定分支合並。

 

(2) git fetch & git merge 

git fetch origin master:tmp 
//在本地新建一個temp分支,並將遠程origin倉庫的master分支代碼下載到本地temp分支
git diff tmp 
//來比較本地代碼與剛剛從遠程下載下來的代碼的區別
git merge tmp
//合並temp分支到本地的master分支
git branch -d temp
//如果不想保留temp分支 可以用這步刪除

如果直接使用git fetch,則步驟如下:

1.創建並更新本 地遠程分支。即創建並更新origin/xxx 分支,拉取代碼到origin/xxx分支上。
2.在FETCH_HEAD中設定當前分支-origin/當前分支對應,如直接到時候git merge就可以將origin/abc合並到abc分支上。

git fetch origin
只是手動指定了要fetch的remote。在不指定分支時通常默認為master

git fetch origin dev
指定遠程remote和FETCH_HEAD,並且只拉取該分支的提交。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM