git重置是什么意思——硬源/主?

我做了一个git pull并得到一个错误:

以下工作树文件将被merge… 在合并之前,请移动或删除它们。

为了解决这个问题,我做了以下事情:

git fetch
git reset --hard origin/master

现在当我执行git pull时,它会显示所有最新的内容。我想知道当我运行这些命令时到底发生了什么。我知道git fetch从远程回购中获取更改,而不将它们合并到本地回购中。

git reset --hard origin/master是什么意思?它是如何工作的?

505017 次浏览
git reset --hard origin/master

说:扔掉我所有阶段性和非阶段性的变化,忘记我当前本地分支上的所有东西,并使它与origin/master完全相同。

您可能想在运行命令之前问这个问题。使用与“硬复位”相同的词语暗示了其破坏性。

在新版本的git(2.23+)中,您可以使用:

git switch --force-create master origin/master

相关参考文档

这只是为了重置到master的例外,当你已经在master中工作,但想要回到原点/master而不留下任何工作痕迹。

假设您没有签出一个新的分支,因为您不想确定它的名称。然后,您需要删除存储库文件夹并再次克隆,就像新来者时代一样。

为什么呢?

git reset --hard origin/master只有在本地分支中才能完全清除。如果您在主分支中,并且您已经做了更改,那么您只能删除所做或更改的所有文件。不能删除已添加的文件夹。要删除它们,如果您不想手动删除它们,则必须删除完整的回购文件夹并再次克隆。这些空文件夹即使在“reset hard”之后也会保留,而且这并不依赖于.gitignore文件。

如上所述,当你想放弃你的更改并强制将HEAD移回origin/master时,你可以使用这个方法。

如果你确实硬重置并错误地丢弃了你的更改,你总是可以执行git reflog来查看每次HEAD更改时的本地回购历史记录列表,并签出所需的提交sha。

您可以:

  • git checkout <commit_sha>来签出一个指向所需提交的新分支。
  • git reset HEAD --hard <commit_sha>来移动你的HEAD回期望的提交。