git revert commit,回到stage和unstaged

时间:2016-01-20 14:38:59

标签: git git-commit

我经常使用

git add -p

选择我要提交的部分。一旦我选择了我想要的东西;我继续使用

git commit -a

并完成我的提交。现在我意识到我不应该使用-a选项,因为现在我已经撤消了使用git add -p完成的工作(即,在多次提交中拆分我的更改)。

我知道恢复这个的唯一方法,并按照我想要的方式恢复原状:

git reset HEAD~
git add -p
git commit

我是否有任何方式必须再次git add -p;执行完全相同的操作将我的更改拆分为多个提交?所以我想撤消git commit -a并回到之前的阶段和非阶段文件(这是使用git add -p 之后git状态的方式)。

1 个答案:

答案 0 :(得分:1)

要恢复由于错误提交而丢失的文件或代码,您可以查看悬空blob。为此,请运行:

$ git fsck --unreachable

这会为您提供悬空blob的列表...例如:

unreachable blob 070204aa62dc0ef612f922a02d06d3....
unreachable blob 821c4ca73cb5c99f7fa5f23358e3a9....
unreachable blob b91c74fc1b5c0f8eb8ccfd1a8024c6....

然后检查其中一个blob以检查丢失的代码:

git show 070204aa62dc0ef612f922a02d06d3....

这使您可以查看悬空blob中的内容,但不会显示文件的名称。然后,您可以使用sha1

的前5个字符将该内容写入文件
git show d06d3 > myfile

这会将'myfile'放在您当前所在的目录中。此时Myfile是.txt,然后您可以将其复制并粘贴/转换为正确的MIME类型。

希望这有帮助。