git clone、git pull和git fetch的區別


基本用法

git clone 

git clone 是將其他倉庫克隆到本地,包括被 clone 倉庫的版本變化,因此本地無需是一個倉庫,且克隆將設置額外的遠程跟蹤分支。因為是克隆來的,所以 .git 文件夾里存放着與遠程倉庫一模一樣的版本庫記錄,clone 操作是一個從無到有的克隆操作。

基本用法:

$ git clone <版本庫的URL> [本地目錄名]

如果不指定本地目錄,則會在本地生成一個遠程倉庫同名的目錄。

git pull

git pull 是拉取遠程分支更新到本地倉庫再與本地分支進行合並,即:git pull = git fetch + git merge

基本用法:

$ git pull <遠程主機名> [遠程分支名]:[本地分支名]

如果不指定遠程分支名和本地分支名,則會將遠程 master 分支拉取下來和本地的當前分支合並。

git fetch

理解 fetch 的關鍵, 是理解 FETCH_HEAD,FETCH_HEAD 指的是:某個 branch 在服務器上的最新狀態。這個列表保存在 .git/FETCH_HEAD 文件中,其中每一行對應於遠程服務器的一個分支。
當前分支指向的 FETCH_HEAD,就是這個文件第一行對應的那個分支。一般來說,存在兩種情況:

  • 如果沒有顯式的指定遠程分支,則遠程分支的 master 將作為默認的 FETCH_HEAD
  • 如果指定了遠程分支,就將這個遠程分支作為 FETCH_HEAD

git fetch 更新本地倉庫的兩種用法:

# 方法一
$ git fetch origin master                #從遠程的origin倉庫的master分支下載代碼到本地的origin master
$ git log -p master.. origin/master      #比較本地的倉庫和遠程參考的區別
$ git merge origin/master                #把遠程下載下來的代碼合並到本地倉庫,遠程的和本地的合並
# 方法二
$ git fetch origin master:temp           #從遠程的origin倉庫的master分支下載到本地並新建一個分支temp
$ git diff temp                          #比較master分支和temp分支的不同
$ git merge temp                         #合並temp分支到master分支
$ git branch -d temp                     #刪除temp

區別

1. 是否需要本地初始化倉庫

git clone 不需要,git pull 和 git fetch 需要。

 

2. 是否可以指定分支推送到遠程

git clone下來的項目可以直接推送到遠程,git pull 和 git fetch 需要先執行 git remote add 添加遠程倉庫后才能 push。

From

https://segmentfault.com/a/1190000017030384

https://www.jianshu.com/p/c6a0397ec6f5


免責聲明!

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



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