天天看點

Git 操作筆記

1、簡單概括

先用一張圖來理一下

git fetch

git pull

的概念:

Git 操作筆記

可以簡單的概括為:

git fetch

是将遠端主機的最新内容拉到本地,使用者在檢查了以後決定是否合并到工作本機分支中。

git pull

 則是将遠端主機的最新内容拉下來後直接合并,即:

git pull = git fetch + git merge

,這樣可能會産生沖突,需要手動解決。

下面我們來詳細了解一下

git fetch

 和

git pull

 的用法。 

2、分支的概念

在介紹兩種方法之前,我們需要先了解一下分支的概念: 

分支是用來标記特定代碼的送出,每一個分支通過SHA1sum值來辨別,是以對分支的操作是輕量級的,你改變的僅僅是SHA1sum值。

如下圖所示,目前有2個分支,A,C,E屬于master分支,而A,B,D,F屬于dev分支。

A----C----E(master)
 \
  B---D---F(dev)
           

它們的head指針分别指向E和F,對上述做如下操作:

git checkout master  //選擇or切換到master分支
git merge dev        //将dev分支合并到目前分支(master)中
           

合并完成後:

A---C---E---G(master)
 \         /
  B---D---F(dev)           

現在ABCDEFG屬于master,G是一次合并後的結果,是将E和F的代碼合并後的結果,可能會出現沖突。而ABDF依然屬于dev分支。可以繼續在dev的分支上進行開發:

A---C---E---G---H(master)
 \         /
  B---D---F---I(dev)
           

分支(branch)的基本操作:

git branch //檢視本地所有分支 

git branch -r //檢視遠端所有分支

git branch -a //檢視本地和遠端的所有分支

git branch <branchname> //建立分支

git branch -d <branchname> //删除本地分支

git branch -d -r <branchname> //删除遠端分支,删除後還需推送到伺服器
git push origin:<branchname>  //删除後推送至伺服器                  git push origin --delete <branchname> //删除遠端分支

要想建立一個遠端分支,不需要特殊指令,直接push到想設定的branch即可
git push origin <newbranchname>

git branch -m <oldbranch> <newbranch> //重命名本地分支
/**
*重命名遠端分支:
*1、删除遠端待修改分支
*2、push本地新分支到遠端伺服器
*/

//git中一些選項解釋:

-d
--delete:删除

-D
--delete --force的快捷鍵

-f
--force:強制

-m
--move:移動或重命名

-M
--move --force的快捷鍵

-r
--remote:遠端

-a
--all:所有           

3、git fetch 用法

git fetch 指令:

$ git fetch <遠端主機名> //這個指令将某個遠端主機的更新全部取回本地
           

如果隻想取回特定分支的更新,可以指定分支名:

$ git fetch <遠端主機名> <分支名> //注意之間有空格
           

最常見的指令如取回

origin

 主機的

master

 分支:

$ git fetch origin master
           

取回更新後,會傳回一個

FETCH_HEAD

 ,指的是某個branch在伺服器上的最新狀态,我們可以在本地通過它檢視剛取回的更新資訊:

$ git log -p FETCH_HEAD
           

如圖: 

Git 操作筆記

可以看到傳回的資訊包括更新的檔案名,更新的作者和時間,以及更新的代碼(19行紅色[删除]和綠色[新增]部分)。

我們可以通過這些資訊來判斷是否産生沖突,以确定是否将更新merge到目前分支。 

4、git pull 用法

前面提到,

git pull

 的過程可以了解為:

git fetch origin master //從遠端主機的master分支拉取最新内容 
git merge FETCH_HEAD    //将拉取下來的最新内容合并到目前所在的分支中
           
  • 1
  • 2

即将遠端主機的某個分支的更新取回,并與本地指定的分支合并,完整格式可表示為:

$ git pull <遠端主機名> <遠端分支名>:<本地分支名>
           
  • 1

如果遠端分支是與目前分支合并,則冒号後面的部分可以省略:

$ git pull origin next
           
  • 1

5、參考文章

阮一峰老師部落格: Git遠端操作詳解

簡書: git中fetch和pull的差別

CSDN: git branch用法總結,檢視、建立、删除、重命名

部落格園: Git中pull對比fetch和merge

git