【问题标题】:Resolve merge conflicts: Force overwrite all files解决合并冲突:强制覆盖所有文件
【发布时间】:2012-12-24 09:18:39
【问题描述】:

我正在开发一个 git 存储库我自己(所以是的,我知道这样做的含义和警告)并且不知何故,其中一棵树在它应该被推送后得到了提交没有。

现在我正试图撤回,它抱怨数百个合并冲突。

有没有办法告诉 git 强制覆盖来自远程服务器的所有本地文件?有没有比git reset --hard HEAD~1 然后拉取更快的方法?

同样,有没有办法通过简单的合并来做同样的事情?我所看到的一切都建议在合并冲突解决阶段检查每个文件,但是对于数百个文件,手动执行是不可能的。

【问题讨论】:

  • 你为什么不干脆把你的沙箱炸掉,然后再用 git clone 一下呢?
  • 我希望得到一些不需要太多时间的东西。该项目很大,需要大量时间来克隆。

标签: git git-merge git-pull


【解决方案1】:

有三种简单的解决方案可以复制远程存储库中的最后一个版本,丢弃您在本地所做的所有更改:

  1. 丢弃您的存储库并再次克隆。这是最简单的解决方案,但是如果您的存储库很大,则可能需要很长时间,并且可能需要额外的努力,例如 reconfigureing 等。

  2. 使用git reset --hard <hash> 放弃本地更改,然后执行git pull。问题是您需要首先找到在您试图避免的任何更改历史之前的提交。重置为该提交哈希后,执行git pull

  3. 执行git fetch 将更新带到远程分支的本地引用(通常是origin/master),然后执行git reset --hard 传递此引用,即git reset --hard origin/master

【讨论】:

  • #3 非常聪明。好答案。顺便说一句,欢迎来到 StackOverflow。请注意:使用反引号 (`) 表示代码或命令行内容。
  • 如果合并不包含任何删除,git checkout --theirs . 似乎可以工作
  • 多年后,我确定 #3 是确定的正确答案。了解fetch 和 refs 的工作原理对于有效使用 Git 非常重要。
  • 运行git fetch origin my_branch 后,尝试git reset --hard origin/my_branch 出现以下错误:fatal: ambiguous argument 'origin/my_branch': unknown revision or path not in the working tree. 是“working tree”位的问题吗?
【解决方案2】:
git reset --hard {remote_repository_name}/{branch_name}

例子:

git reset --hard upstream/branch1

如果您正在使用分支,则可以使用上述代码。但在此之前,您必须将(上游或原始)设置为本地存储库,

git remote add upstream https://github.com/lakini/example.git

这里,https://github.com/lakini/example.git 是远程上游仓库。

与此相同,我们也可以在远程存储库(源)中工作。

git reset --hard origin/branch1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2015-10-15
    • 2012-04-20
    • 2011-07-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多