HOWTO · Git

Git 强制拉取

本教程是关于在 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 从存储中获取本地更改。