如何使用“git pull”强制覆盖本地更改

您是否曾经在git中进行项目并遇到错误,告诉您git pull因为有本地更改而无法使用?

error: Untracked working tree file 'App.vue' would be overwritten by merge

这通常是一些更改已提交到您从中提取的存储库 – 但您在本地有一个类似的文件。例如,如果一个文件被意外添加到名为 的存储库README.md中,而您已经README.md在本地版本中。

但有时,您想强制使用 repo 中找到的文件覆盖您的文件。在这种情况下,您的本地更改将被远程存储库中的更改替换。

强制 git pull#

要强制 a git pull,您需要做三件事:

  • 首先同步并获取所有远程存储库更改。
  • 备份您当前的分支 – 因为当我们强制拉取时,所有更改都将被覆盖。
  • 强制git pull.

这里要做的重要事情是备份,您可以将所有本地更改提交到备份分支。如果您担心覆盖文件,也可以将文件复制到其他地方。如果您不将本地更改提交/备份到另一个分支,它们将被覆盖,因此小心。:)

要强制 a git pull,我们运行以下命令来创建备份分支,然后git pull在 master 分支上强制:

git fetch --all
# Creates a new branch
git branch my-backup-branch
# Switch to the new branch.. we'll use it to backup our local changes
git switch my-backup-branch
# Add all files to a commit
git add .
# Commit the new branch, so that it is saved
git commit -m "Backup of branch"
# Switch back to our main branch, `master`
git switch master
# Force git pull using `git reset --hard`
git reset --hard origin/master

强制 Git 拉取

强制从远程存储库执行 git pull 的关键命令是git reset --hard origin/master. 其他命令是通过备份确保您不会丢失任何数据!

首先,git fetch --all将我们的远程同步到我们的本地。然后,git branch my-backup-branch创建一个新分支,我们切换到该分支进行备份。之后,我添加了commit, 以便我们在该备份分支上提交任何更改my-backup-branch,因此内容保持保存。如果您不将更改提交到备份分支,您将丢失它们

然后我们切换回我们的主master分支,假设您的主分支被调用master。如果它被称为别的东西,您将不得不使用该命令。您可以通过运行查看所有其他可切换到的分支git branch --list

最后,我们使用git reset --hard origin/master强制 git pull。这将强制覆盖您所做的任何本地更改。

你完成了。现在您的本地更改将备份到分支上my-backup-branch,所有远程更改都将强制进入您的master分支。

找不到来源/主人

如果你找不到origin/master,你现在可能在你的原点上有那个分支。相反,请尝试运行git branch -r以查看任何远程分支,以便从中选择您想要的分支git reset