Git 強制拉取
在本教程中,我們將學習如何在 Git 中強制從遠端倉庫中拉取更改。
有時,我們可能需要丟棄本地修改,並在協作開發環境中用遠端倉庫中的更新替換它們。
我們使用 git pull
命令從遠端倉庫中獲取更改到本地倉庫中的本地分支。
只有當本地分支中的更改落後於遠端倉庫中的更改時,git pull
命令才會成功。
如果本地分支和遠端倉庫的更改發生分歧,如果我們希望丟棄本地更改,我們需要強制執行 git pull
以覆蓋本地更改,
我們現在將通過一個例子來詳細說明這一點。
使用 git fetch
、git reset
和 git 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
從儲存中獲取本地更改。