如何将工作目录设置为较旧的提交?

时间:2013-05-14 09:38:39

标签: git working-directory

为了追踪我在哪个版本中破坏了我的软件中的功能,我需要查看我的存储库的旧版本。我只想将工作目录设置为较旧的提交,使用代码,然后丢弃更改,然后尝试另一次提交。

我不想改变任何有关提交的内容,也不想删除或创建提交。我尝试使用git reset,但之后不再显示新的提交。所以我再次下载了存储库,因为我不知道如何还原它。

3 个答案:

答案 0 :(得分:15)

一个简单的git checkout old-sha1可以是一个开始,但这种任务的真正命令是:

<强> git bisect

  

通过二进制搜索查找引入错误的更改

如果您有一个脚本能够测试您的工作树是否“正常”,您可以通过git bisect在之前的提交中执行该脚本,找到破坏您测试的第一个提交。

请注意,GitHub for Windows尚不支持此命令:您必须打开shell。


git checkout会让你进入一个独立的HEAD,这没关系,因为你不会做任何修改。
要回到原来的位置,请查看分支机构:

git checkout master

请参阅“Why did git detach my head?”。

答案 1 :(得分:7)

您可以使用以下方法将另一个分支中的代码签出到索引:

git checkout my-other-branch .

点是路径说明符,表示您要对整个存储库执行此操作。您同样可以仅指定特定文件夹。从技术上讲,您可以为my-other-branch参数指定任何“tree-ish”说明符,例如标记,提交哈希,类似HEAD~1等等...如果您希望这些更改不被取消,你可以这样做:

git reset HEAD

假设您开始处于干净状态,您现在可以使您的工作目录处于与my-other-branch相同的状态。

答案 2 :(得分:2)

使用git checkout <branch_name>,您可以切换到其他可用分支。如果要将HEAD重置为旧提交,可以尝试以下命令:

  • git reset --hard HEAD~1通过单次提交重置HEAD
  • git reset - hard HEAD~2通过 2提交重置HEAD 等等

此外,如果您有提交,那么您可以尝试以下命令:git reset --hard <commit> 通过这种方式,您可以将工作目录设置为较早的提交。

要完全放弃您可以尝试的更改:git reset --hard,它会将您的目录清理为上一次提交。