Git: 如何在 Mercurial 中像 hg up -C 一样更新工作目录

Git: how to update the working directory like hg up -C in Mercurial

我以前使用 mercurial,但现在使用 git。有一些问题,因为 git 还是有点不同。

您能否建议如何将 git 存储库更新到最后一次提交,丢弃所有更改和冲突,例如 hg up -C 在 Mercurial

中所做的那样

我被建议命令 git checkout -f,它显示这条消息:

Your branch and 'origin/master' have diverged, and have 24 and 5 different commit(s) each, respectively.

应用此命令后,工作目录中的文件不会更新。

首先,您收到的错误消息告诉您分支的本地和远程版本存在差异。为了从远程分支获得更改,您将不得不合并或变基。假设你想使用合并策略,你可以试试这个:

git fetch                             # get the latest changes from the remote
git checkout theBranch                # checkout your local branch
git merge -X theirs origin/theBranch  # merge with remote version of the branch

git merge 中的 -X theirs 选项意味着您将无条件地保留来自远程的文件版本,覆盖您在本地可能拥有的任何版本。

this SO article 所述,如果合并导致本地文件被删除,则您可能必须使用以下方法手动删除它:

git rm /path/to/deleted/file

然后您可以进行合并提交,并继续工作。

您收到的消息只是告诉您,您当前签出的分支与远程存储库中名为 origin 的对应分支的本地副本之间存在差异。然后它继续告诉您有许多本地提交不是远程提交,反之亦然。

只需拉入远程更改并推出远程更改即可删除此消息。 Git 提供了很多信息。这没什么好担心的。

如果 git status 现在没有显示任何其他内容,您实际上已经放弃了所有未提交的更改。一种方法是检出文件,正如您可能所做的那样。这使您能够重置对单个或多个文件的更改。另一种方法是使用 git reset HEAD --hard 将您的分支重置为头部(简化:最新提交)这显然会删除所有未提交的文件中的所有更改。

没有硬标志重置会将暂存更改重置为未暂存更改。使用硬标志,所有更改都不会更改和撤消。