合並代碼操作 | git fetch 與 git pull


前言

  • 首先我們要說簡單說git的運行機制。git分為本地倉庫和遠程倉庫,我們一般情況都是寫完代碼,commit到本地倉庫(生成本地倉的commit ID,代表當前提交代碼的版本號),然后push到遠程倉庫(記錄這個版本號),這個流程大家都熟悉。
  • 我們本地的git文件夾里面對應也存儲了git本地倉庫master分支的commit ID 和 跟蹤的遠程分支orign/master的commit ID(可以有多個遠程倉庫)。那什么是跟蹤的遠程分支呢,打開git文件夾可以看到如下文件:
  • .git/refs/head/[本地分支]
  • .git/refs/remotes/[正在跟蹤的分支]
  • 其中head就是本地分支,remotes是跟蹤的遠程分支,這個類型的分支在某種類型上是十分相似的,他們都是表示提交的SHA1校驗和(就是commitID)。
  • 但是,不管他們是如何的相似,他們還是有一個重大的區別:
  • 更改遠端跟蹤分支只能用git fetch,或者是git push后作為副產品(side-effect)來改變。我們無法直接對遠程跟蹤分支操作,我們必須先切回本地分支然后創建一個新的commit提交
    在這里插入圖片描述

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

git fetch

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

  • 這時候本地的代碼版本可能就變成了commit ID=3,即生成了一個新的代碼版本。
    在這里插入圖片描述

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

合並代碼操作

# 在本地新建一個temp分支,並將遠程origin倉庫的master分支代碼下載到本地temp分支
git fetch origin master:tmp 

# 來比較本地代碼與剛剛從遠程下載下來的代碼的區別
git diff master tmp 

# 合並temp分支到本地的master分支
git merge tmp

# 如果不想保留temp分支 可以用這步刪除 
git branch -d temp

git pull

  • 是用git pull更新代碼的話就比較簡單暴力了,看下圖。
    在這里插入圖片描述
    使用git pull的會將本地的代碼更新至遠程倉庫里面最新的代碼版本

合並代碼操作


git checkout 源分支

git pull origin 源分支

git checkout 目標分支

git merge 源分支

參考文檔


免責聲明!

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



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