Git 強制拉取

Azhar Bashir Khan 2022年4月22日
Git 強制拉取

在本教程中,我們將學習如何在 Git 中強制從遠端倉庫中拉取更改。

有時,我們可能需要丟棄本地修改,並在協作開發環境中用遠端倉庫中的更新替換它們。

我們使用 git pull 命令從遠端倉庫中獲取更改到本地倉庫中的本地分支。

只有當本地分支中的更改落後於遠端倉庫中的更改時,git pull 命令才會成功。

如果本地分支和遠端倉庫的更改發生分歧,如果我們希望丟棄本地更改,我們需要強制執行 git pull 以覆蓋本地更改,

我們現在將通過一個例子來詳細說明這一點。

使用 git fetchgit resetgit merge 強制拉取 Git 中的遠端更改

git pull 命令不是一個單一的操作。git pull 命令執行命令即。git fetch 從遠端倉庫中獲取資料,然後命令 git merge 將這些更改合併到本地倉庫中。

因此,git pull 命令按如下方式執行這兩個命令。

$ git fetch
$ git merge origin/$CURRENT_BRANCH

git fetch 命令從遠端倉庫下載最新更改。它不會對本地倉庫進行任何合併變基

上面給出的 git merge 命令合併來自遠端倉庫的更改,由別名 origin 給出,這些更改已新增到 $CURRENT_BRANCH,這些更改尚未出現在本地倉庫的本地分支中。

因此,如果本地倉庫中的本地分支與遠端倉庫中的分支不同,則 git pull 將失敗。

我們可能對本地分支的工作樹中的檔案進行了一些本地更改。因此,這會導致 git pull 失敗。

我們現在可能決定放棄本地更改以支援遠端倉庫中的更改。

因此,我們需要強行拉取將覆蓋本地修改的更改。

我們需要執行以下操作來實現對遠端更改的強制拉取。

$ git fetch
$ git reset --hard HEAD
$ git merge origin/$CURRENT_BRANCH

帶有 --hard 選項的 git reset 命令會將分支重置為我們剛剛獲取的內容。它還將丟棄對跟蹤檔案的任何本地更改,並且將刪除未跟蹤的檔案。

因此,請謹慎使用,因為任何本地更改都將丟失。

或者,我們可以在拉取更改之前儲存本地更改。我們可以使用 git stash 儲存更改以及更改的拉取。

我們可以這樣做。

$ git fetch
$ git stash
$ git merge origin/$CURRENT_BRANCH
$ git stash pop

因此,當我們使用 git stash 時,我們不再需要對本地倉庫的本地分支執行 git reset

我們使用 git stash pop 從儲存中獲取本地更改。

相關文章 - Git Pull