【问题标题】:Git: how to update the working directory like hg up -C in MercurialGit:如何在 Mercurial 中更新工作目录,如 hg up -C
【发布时间】:2015-10-21 09:43:40
【问题描述】:

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

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

有人建议我命令git checkout -f,它会显示以下消息:

您的分支和 'origin/master' 已经分道扬镳,分别有 24 和 5 个不同的提交。

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

【问题讨论】:

    标签: git mercurial


    【解决方案1】:

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

    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
    

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

    【讨论】:

    • 我是否理解正确,本地和远程都有变化,并且有两个头?
    • 你是正确的。过去有一些共同的祖先,但本地和远程在该共同祖先之上都有一组独特的提交。所以它需要通过合并或变基来解决(我怀疑你想在你的情况下合并)。
    【解决方案2】:

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

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

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

    如果没有硬标志重置,则将分阶段的更改重置为非分阶段的更改。使用硬标志,所有更改都不会更改和撤消。

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多