Git reset中的模糊参数问题

11

最近我在进行git rebase -i时出了点问题,因此我想执行git reset --hard HEAD@{5}

但是,执行git reset --hard HEAD@{5}或者git log HEAD@{5}会导致显示以下错误信息:

fatal: ambiguous argument 'HEAD@{5}': unknown revision or path not in the working tree.

后来我决定指定git reflog中显示的与HEAD@{5}相对应的哈希键。例如:

git reset --hard e8be841

在这样做的过程中,是否存在破坏Git存储库或执行意外操作的风险?


1
作为以后的参考,git rebase --abort 是跳出 rebase 操作的好方法。 - asm
谢谢,但是git rebase -i已经提交了。我相信"git rebase --abort是用于放弃尚未完成的rebase(因为存在冲突或者交互式处理等原因),我应该在我的原问题中澄清这一点。 - morfys
3个回答

16

对我来说问题在于我需要在Windows命令提示符中加上双引号。

而不是:

git reset --soft 'HEAD^' 

我必须写:

git reset --soft "HEAD^"

我也需要这样做才能在PowerShell中使用类似的命令。例如,在Windows 10中,git diff HEAD@{8}在命令提示符中可以正常工作,但我必须在PowerShell中使用git diff "HEAD@{8}" - Tone
太有帮助了!我刚刚花了一个小时来理解“模棱两可的参数”错误,但现在它可以工作了 :-) - Frank

1

Git在合并和变基方面非常宽容。如果您在这些操作期间查看git存储库的文件结构,您会发现它会更改用于帮助执行这些操作的文件,并且不会不安全地更改核心对象。如果确实需要更改,则以一种添加方式进行。

因此,对您的存储库几乎没有造成任何损害的可能性。例如,获取另一个repo,制作副本,开始变基,然后比较两个.git文件夹。

P.S.根据您问题中的评论,是的,请使用git rebase --abort


非常感谢您的回复,Adam。我不明白的是为什么“git reset --hard HEAD@{5}”会出现歧义错误消息,而“git reset --hard e8be841”却可以正常执行而没有错误。哈希“e8be841”对应于git reflog中的HEAD@{5}条目。 - morfys
你的情况可能存在一些损坏.. 你是不是把HEAD%{5}错认为了yourbranch@{5}? - Adam Dymitruk
我的“git reflog”只显示包含HEAD@{X}的条目。因此,我的git reset指定了HEAD@{X}或相应的哈希值。Git怎么可能会损坏?谢谢。 - morfys
非常奇怪,使用HEAD@{5}时会出现错误,而使用reflog中的哈希值却没有出现错误。您有通过编辑器查看reflog的内容吗?该文件位于.git文件夹中... - Adam Dymitruk
我已经查看了.git/logs/refs/heads。但是我没有看到任何明显的迹象表明有什么损坏... - morfys

0

Git存在一些shell参数引用问题。

请尝试使用git log 'HEAD@{5}'代替。

在我的情况下,我会收到错误信息fatal: Log .git/logs/HEAD is empty.

下一个解决方法是:

git log HEAD^^^^^


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