有没有一种高效的方法执行 git reset --hard HEAD?

3
今天下午我做了一个git pull。合并失败,有成千上万个文件发生冲突。我找不到任何一条命令可以让合并冲突后选择所有文件的"theirs"策略,也不想解决每一个文件,所以尝试中止合并。 git reset --mergegit merge --abortgit checkout master都没有起作用。没有合并头,其他的都失败了。我尝试了git reset --hard HEAD,8个小时后只完成了50%。为什么会出现这种情况,如何避免这种情况发生?我有一个RAID SSD,也许只需要15分钟就可以再次克隆repo。
以下是一些可能的解决方案:
  1. 重置速度快的命令。
  2. 在合并失败后的命令,选择所有文件的"theirs"策略,例如:git checkout --theirs .(此命令无效)。
我非常详细地查看了流行的git问题,但没能找到大规模合并冲突的解决方案。
以下是错误信息:
C:\Users\sticker592\source\repos\netDocs\docs-1>git reset --merge
error: Untracked working tree file '.gitattributes' would be overwritten by merge.
fatal: Could not reset index file to revision 'HEAD'.

C:\Users\sticker592\source\repos\netDocs\docs-1>git merge --abort
fatal: There is no merge to abort (MERGE_HEAD missing).
C:\Users\sticker592\source\repos\netDocs\docs-1>git merge --strategy-option theirs
Already up-to-date.

C:\Users\sticker592\source\repos\netDocs\docs-1>git merge master --strategy-option theirs
Already up-to-date.

C:\Users\sticker592\source\repos\netDocs\docs-1>git checkout --theirs
fatal: '--ours/--theirs' cannot be used with switching branches

C:\Users\sticker592\source\repos\netDocs\docs-1>git merge -X theirs master
Already up-to-date.
C:\Users\sticker592\source\repos\netDocs\docs-1>git status
On branch master
Your branch is up-to-date with 'origin/master'.

合并在VS团队资源管理器中仍然存在冲突,需要在提交或推送之前解决这些冲突。

我的第一个问题是,你的 Git 存储库到底有什么东西需要这么长时间?这不可能是网络的问题,因为硬重置是在本地进行的。你的其他基本 Git 命令也需要很长时间吗? - Tim Biegeleisen
@TimBiegeleisen 他们慢,但不是工作日慢,大约10分钟慢。 - user5389726598465
如果一个提交只影响了几个文件,但需要花费10分钟的时间,那么我可以想象整个代码库的提交需要花费数小时。也许尝试缩小Git仓库的大小。你的仓库里有很多大型二进制文件吗? - Tim Biegeleisen
1
我给你点了个赞。希望有一位Git专家能看到这个并比我更有帮助。 - Tim Biegeleisen
如果这需要几个小时的时间,那么你的系统或者仓库肯定出了问题。正常情况下应该在一秒钟以内完成。 - hobbs
显示剩余5条评论
1个回答

1
第一个测试是在另一个文件夹中执行git clone,以获取新的副本并检查该操作是否需要几个小时。
然后,您可以将当前工作目录中的更改集成到新的副本中。
但是,如果问题仍然存在(而且不仅限于您),则需要安装GVFS(Git虚拟文件系统),以确保在处理大型存储库时任何Git操作都具有快速响应时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接