我做了一个git拉,得到了一个错误:

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

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

git fetch
git reset --hard origin/master

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

git重置是什么意思——硬源/主?它是如何工作的?


当前回答

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

git switch --force-create master origin/master

相关参考文档

其他回答

git reset --hard origin/master

说:扔掉我所有的阶段性和非阶段性的变化,忘记我当前本地分支上的一切,并使其与原点/master完全相同。

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

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

git switch --force-create master origin/master

相关参考文档

如上所述,当您想放弃更改并强制将HEAD移回原点/主节点时,可以使用此方法。

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

您可以:

Git checkout <commit_sha>来签出一个指向所需提交的新分支。 git reset HEAD——hard <commit_sha>来移动你的HEAD到想要的提交。

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

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

为什么呢?

Git重置——如果你在本地分支中,硬源/master只会作为一个完整的擦除。如果您在主分支中,并且您已经做了更改,那么您只能删除所做或更改的所有文件。不能删除已添加的文件夹。要删除它们,如果您不想手动删除它们,则必须删除完整的回购文件夹并再次克隆。这些空文件夹即使在“硬重置”之后也会保留,而且这并不依赖于.gitignore文件。