47

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

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

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

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

4

2 回答 2

85

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

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

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

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

于 2013-01-10T03:31:12.733 回答
6
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
于 2017-10-04T06:20:39.950 回答