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
从存储中获取本地更改。