查询是关于git reset,
阶段1:现在我想使用以下命令恢复到特定提交,前提是没有本地更改。
git reset --hard <sha 1 of specific commit>
查询1:如何恢复到新的单独分支?
查询2:过了一段时间,我想恢复到第1阶段状态, 收回我使用
git reset --hard
丢弃的所有提交。是 那可能吗?
请建议:)
答案 0 :(得分:2)
git reset
仅适用于当前分支,因此如果您想在单独的分支上执行它,只需创建一个并检查它。例如,使用git checkout -b new_branch_name
。这将创建一个指向与之前相同的提交的分支。然后,您可以执行git reset --hard
而不会影响您所在的原始分支。
现在,如果您使用了git reset --hard
并且没有指向原始提交的备份分支,您仍然可以恢复它。幸运的是,Git不会删除丢失的提交但会保留它们直到存储库被垃圾收集。所以你很有可能恢复。
您应该检查的第一件事是使用git reflog
的reflog。它将为您提供HEAD
之前指出的内容的日志。在某些时候你应该看到这样的条目:
b3db916 HEAD@{n}: reset: moving to b3db916
这是您git reset --hard b3db916
的结果。现在紧接着它的条目是之前的硬重置状态。因此,如果您查看左侧的哈希值,那应该是您要恢复的提交。您可以使用git show <hash>
验证这一点。顺便说一句。您也可以使用git show HEAD@{n+1}
(n+1
是重置条目号后面的数字),而不是指定哈希值。如果它不是您正在寻找的提交,请尝试其他的,看看您是否能找到它。
如果您找到了提交,则可以使用git branch new_branch <hash>
或git branch new_branch HEAD@{n+1}
创建一个指向该提交的新分支。
如果您在reflog中找不到该条目(这可能不太可能,但可能),您也可以尝试使用git-fsck
恢复丢失的对象。
答案 1 :(得分:0)
1 git checkout -b newbranch && git reset --hard sha
2一切皆有可能。是否要将newbranch重置为原始状态? git重置。你只是想在工作目录中获得原始状态吗?然后git checkout stage1
答案 2 :(得分:0)
问题1:我想你会想要在特定提交之后“做”事情[并且在特定提交之下有很多提交]。假设这个分支是STAGE_1_BRANCH
如果是这种情况,你可以做
git checkout -b temp sha_of_specific_commit
#do_things
#commit
问题2:现在您希望在特定提交之后将您最近的提交推回到STAGE_1_BRANCH,然后是其他提交
git rebase temp STAGE_1_BRANCH