日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git fetch和git pull的区别_Git实战(实验楼)学习笔记 实验2 基本用法(下)

發布時間:2025/3/19 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git fetch和git pull的区别_Git实战(实验楼)学习笔记 实验2 基本用法(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、實驗介紹

本節實驗為 Git 入門第二個實驗,繼續練習最常用的 Git 命令。

知識點

  • 對比差異
  • 分布式的工作流程
  • Git 標簽

實驗環境

實驗環境為 Ubuntu Linux 命令行環境,需要了解基本的 Linux 操作,如果沒有使用過 Linux 的同學,推薦先學習 Linux 基礎入門 前三個實驗。

實驗準備

在進行該實驗之前,可以先 clone 一個練習項目 gitproject :

本節中的實驗操作都是在該項目中完成。

二、比較內容

下面將學習如何比較提交,分支等內容。

2.1 比較提交 git diff

現在我們對項目做些修改:

使用 git status 查看當前修改的狀態:

可以看到一個文件修改了,另外一個文件添加了。如何查看修改的文件內容呢,那就需要使用 git diff 命令。git diff 命令的作用是比較修改的或提交的文件內容。

上面的命令執行后需要使用 q 退出。命令輸出當前工作目錄中修改的內容,并不包含新加文件,請注意這些內容還沒有添加到本地緩存區。

將修改內容添加到本地緩存區,通配符可以把當前目錄下所有修改的新增的文件都自動添加:

再執行 git diff 會發現沒有任何內容輸出,說明當前目錄的修改都被添加到了緩存區,如何查看緩存區內與上次提交之間的差別呢?需要使用 --cached 參數:

可以看到輸出中已經包含了新加文件的內容,因為 file1 已經添加到了緩存區。

最后我們提交代碼:

提交后 git diff 與 git diff --cached 都不會有任何輸出了。

2.2 比較分支

可以用 git diff 來比較項目中任意兩個分支的差異。

我們首先創建一個新的分支 test,并在該分支上提交一些修改:

然后,我們查看 test 分支和 master 之間的差別:

git diff 是一個難以置信的有用的工具,可以找出你項目上任意兩個提交點間的差異。可以使用 git help diff 詳細查看其他參數和功能。

2.3 更多的比較選項

如果你要查看當前的工作目錄與另外一個分支的差別,你可以用下面的命令執行:

你也以加上路徑限定符,來只比較某一個文件或目錄:

上面這條命令會顯示你當前工作目錄下的 file1 與 test 分支之間的差別。

--stat 參數可以統計一下有哪些文件被改動,有多少行被改動:

三、分布式的工作流程

下面我們學習 Git 的分布式工作流程。

3.1分布式的工作流程

你目前的項目在 /home/shiyanlou/gitproject 目錄下,這是我們的 Git 倉庫(repository),另一個用戶也想與你協作開發。他的工作目錄在這臺機器上,如何讓他提交代碼到你的 Git 倉庫呢?

首先,我們假設另一個用戶也用 shiyanlou 用戶登錄,只是工作在不同的目錄下開發代碼,實際工作中不太可能發生,大部分情況都是多個用戶,這個假設只是為了讓實驗簡化。

該用戶需要從 Git 倉庫進行克隆:

這就建了一個新的 "myrepo" 的目錄,這個目錄里包含了一份gitproject倉庫的克隆。這份克隆和原始的項目一模一樣,并且擁有原始項目的歷史記錄。

在 myrepo 做了一些修改并且提交:

myrepo 修改完成后,如果我們想合并這份修改到 gitproject 的 git 倉庫該如何做呢?

可以在倉庫 /home/shiyanlou/gitproject 中把myrepo的修改給拉 (pull)下來。執行下面幾條命令:

這就把 myrepo 的主分支合并到了 gitproject 的當前分支里了。

如果 gitproject 在 myrepo 修改文件內容的同時也做了修改的話,可能需要手工去修復沖突。

如果你要經常操作遠程分支(remote branch),你可以定義它們的縮寫:

git pull 命令等同于執行兩個操作: 先使用 git fetch 從遠程分支抓取最新的分支修改信息,然后使用 git merge 把修改合并進當前的分支。

gitproject 里可以用 git fetch 來執行 git pull 前半部分的工作, 但是這條命令并不會把抓下來的修改合并到當前分支里:

獲取后,我們可以通過 git log 查看遠程分支做的所有修改,由于我們已經合并了所有修改,所以不會有任何輸出:

當檢查完修改后,gitproject 可以把修改合并到它的主分支中:

如果我們在 myrepo 目錄下執行 git pull 會發生什么呢?

myrepo 會從克隆的位置拉取代碼并更新本地倉庫,就是把 gitproject 上的修改同步到本地:

因為 myrepo 是從 gitproject 倉庫克隆的,那么他就不需要指定 gitproject 倉庫的地 址。因為 Git 把 gitproject 倉庫的地址存儲到 myrepo 的配置文件中,這個地址就是在 git pull 時默認使用的遠程倉庫

如果 myrepo 和 gitproject 在不同的主機上,可以通過 ssh 協議來執行 clone 和pull 操作:

這個命令會提示你輸入 shiyanlou 用戶的密碼,用戶密碼隨機,可以點擊實驗操作界面右側工具欄的 SSH直連 按鈕查看。

3.2 公共git倉庫

開發過程中,通常大家都會使用一個公共的倉庫,并 clone 到自己的開發環境中,完成一個階段的代碼后可以告訴目標倉庫的維護者來 pull 自己的代碼。

如果你和維護者都在同一臺機器上有帳號,那么你們可以互相從對 方的倉庫目錄里直接拉所作的修改,git 命令里的倉庫地址也可以是本地的某個目錄名:

也可以是一個ssh地址:

3.3 將修改推到一個公共倉庫

通過 http 或是 git 協議,其它維護者可以通過遠程訪問的方式抓取(fetch)你最近的修改,但是他們沒有寫權限。如何將本地私有倉庫的最近修改主動上傳到公共倉庫中呢?

最簡單的辦法就是用 git push 命令,推送本地的修改到遠程 Git 倉庫,執行下面的命令:

或者

git push 命令的目地倉庫可以是 ssh 或 http/https 協議訪問。

3.4 當推送代碼失敗時怎么辦

如果推送(push)結果不是快速向前 fast forward,可能會報像下面一樣的錯誤:

這種情況通常是因為沒有使用 git pull 獲取遠端倉庫的最新更新,在本地修改的同時,遠端倉庫已經變化了(其他協作者提交了代碼),此時應該先使用 git pull 合并最新的修改后再執行 git push:

四、git標簽

4.1 輕量級標簽

我們可以用 git tag 不帶任何參數創建一個標簽(tag)指定某個提交(commit):

這樣,我們可以用stable-1 作為提交 8c315325 的代稱。

前面這樣創建的是一個“輕量級標簽”。

如果你想為一個tag添加注釋,或是為它添加一個簽名, 那么我們就需要創建一個 "標簽對象"。

標簽對象

git tag 中使用 -a, -s 或是 -u三個參數中任意一個,都會創建一個標簽對象,并且需要一個標簽消息(tag message)來為 tag 添加注釋。 如果沒有 -m 或是 -F 這些參數,命令執行時會啟動一個編輯器來讓用戶輸入標簽消息。

當這樣的一條命令執行后,一個新的對象被添加到 Git 對象庫中,并且標簽引用就指向了一個標簽對象,而不是指向一個提交,這就是與輕量級標簽的區別。

下面是一個創建標簽對象的例子:

4.2 簽名的標簽

簽名標簽可以讓提交和標簽更加完整可信。如果你配有GPG key,那么你就很容易創建簽名的標簽。首先你要在你的 .git/config 或 ~/.gitconfig 里配好key。

下面是示例:

你也可以用命令行來配置:

現在你可以在創建標簽的時候使用 -s 參數來創建“簽名的標簽”:

如果沒有在配置文件中配 GPG key,你可以用 -u 參數直接指定。

五、小結

本節學習了下面知識點:

  • git diff
  • 分布式的工作流程
  • git tag

課后練習

使用 [GitHub](https://github.com) 賬號,創建自己的倉庫并練習一遍本節所講的內容。

對于初學者,如果不想深入 git 強大的高級功能的話,學完這個實驗就可以開始上手開發了,后續實驗內容用到的比較少,并且理解難度大。如果仍然感興趣,建議使用一段時間 Git 后再仔細學習后續實驗,會有更好的收獲。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的git fetch和git pull的区别_Git实战(实验楼)学习笔记 实验2 基本用法(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。