8

我进行了一次提交,提取并合并了一些更改,然后进行了第二次提交。当我想回到第一个提交时,我运行了命令

git reset --hard <sha hash>

虽然响应是“HEAD 现在位于 <sha hash>”,但我的代码看起来与运行该命令之前一样。通常,它会更改为我以前的内容,但看起来有些东西无法正常工作。在重置头部之前,我是否需要运行不同的命令来取消合并?


额外信息

当我运行git status它说:

app/assets/images/.DS_Store.orig 未追踪

我可以添加它。

根据git reflog,我在提交 hash1 之前拉了(我认为是“在合并之前”)。拉动有一个 sha hash2(git log未显示)。当我挖掘 hash1 和 hash2 时,我看到了我所做的更改,并且可以从中重建我的原始代码。不过,这似乎很奇怪。如果我尝试git reset使用其中任何一个,我将无法从合并之前获取我的代码。

4

4 回答 4

1

这:

git reset --hard <sha-hash>

在以下情况下不起作用:

  • 您正在尝试重置未跟踪的文件(它们不是您的 git 存储库的一部分),
  • 某些属性被您的 git 规范化文件 ( .gitattributes) 覆盖,
  • 您使用了错误的哈希或哈希在您的更改之后。

也许解决方案是通过以下方式返回远程分支上的内容:

git reset origin/master --hard

rebase在它之上或git cherry-pick你真正需要的提交上散列。

如果以上没有帮助,您还应该:

  • 确保在正确的分支 ( git branch -a) 上测试它,而不是在分离的分支上,
  • 检查git reflog有关您的历史记录的更多详细信息,
  • 运行git blame some/file以显示您的代码行在哪个版本被修改,这可以帮助您跟踪提交代码时出现的问题,就像您不期望的那样,
  • 如果您不喜欢之前做出的特定提交,您可以revert这样做。
于 2016-07-29T15:56:10.743 回答
0

我不使用命令行进行重置,因为 gitk(分支查看器)可以做到这一点。有时重置不起作用。然后我删除所有目录,只留下 .git 文件夹。经常发生某些工作文件无法删除的情况。这就是 git 无法重置的问题。您必须关闭保留文件的程序。

于 2013-08-23T06:37:13.217 回答
0

I am sure the sha1 value you put in 'git reset --hard ' is the HEAD. If you want to reset the HEAD to the first commit,you should run command like this:

git reset --hard <first commit's sha1 value>

or:

git reset --hard <HEAD~1>  

this site maybe help you to know how 'git reset' work:git-reset

于 2013-08-23T05:48:09.897 回答
0

我认为您应该输入第二次提交的 SHA 的前 7 个字符,而不是第一个。例如,您有 2 个提交:

提交 212323b232g2h3jj232j323kkk23 作者: 日期: ...11:40 PM ...

提交 abcdefb232g2h3kk239j183kkk24 作者: 日期: ...10:00 PM ...

如果你想重置你应该输入的第一个提交: git reset abcdefb

于 2017-05-19T04:44:39.950 回答