2013-05-14 31 views
15

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

我不想改变任何关于提交的内容,既不删除也不创建它们。我尝试使用git reset,但在此之后,更新的提交不再显示。所以我再次下载版本库,因为我不知道如何恢复。

+0

我在谷歌搜索之后来到这里“[将工作目录交换到较早的提交但保持不变](https://www.google.co.uk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF- 8#安全=活动&q =交换+工作+目录+到+ +的早期+承诺+但+留下+头+不变)”。我结束了使用'git checkout - '我想恢复到之前提交的文件 – dumbledad 2016-11-01 15:53:58

回答

13

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

git bisect

查找二进制搜索介绍了一个bug

如果你有能一个脚本来测试,如果你的工作树“工程”或没有,你可以在以前的承诺通过git bisect执行该脚本的变化,找到打破你的测试的第一次提交。

请注意,此命令尚未直接受GitHub for Windows支持:您将不得不打开一个shell。


一个git checkout会离开你在一个分离的头,这并不重要,因为你不会做任何修改。
要回到了你,签了一个分支:

git checkout master 

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

+0

谢谢,我以为'checkout'只适用于以前的分支。我可以使用哪种脚本进行“平分”?我的应用程序是用本机C++编写的。顺便说一下,Git给我留下了深刻的印象,包括这样一个命令。 – danijar 2013-05-14 09:43:07

+0

@danijar不,你可以检查任何树木。例如,'git checkout“@ {10 minutes ago}”'会在10分钟前给你提交。 – VonC 2013-05-14 09:45:22

+0

@danijar git bisect,任何你想要的脚本,只要它退出状态0(工作)或1(失败)。 – VonC 2013-05-14 09:45:56

1

使用git checkout <branch_name>您可以切换到其他可用分支。如果你想重置HEAD到老犯,你可以试试下面的命令:

  • 的git的复位 - 硬HEAD〜1通过到HEAD重置单个提交
  • git的复位 - git reset --hard <commit> 通过这种方式,你可以将工作目录设置到旧:硬头〜2的2提交

此外,如果你已经提交,那么你可以试试这个命令重置HEAD承诺。

要彻底放弃更改,您可以尝试:git reset --hard这将清理您的目录到以前的提交。

5

您可以通过使用下列检查另外一个分支代码指数:

git checkout my-other-branch . 

的点是表示要为整个库做一个路径说明。您也可以只指定一个特定的文件夹。从技术上讲,你可以为my-other-branch参数指定任何'tree-ish'说明符,例如标签,提交散列,例如HEAD~1等等。如果你想这些变化是不分级的,你可以再做:

git reset HEAD 

假设你在一个干净的状态开始,你现在就会有你的工作目录是在相同的状态my-other-branch

相关问题