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