23

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

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

4

3 回答 3

19

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

git bisect.

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

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

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


Agit checkout会让你处于一个分离的 HEAD 中,这并不重要,因为你不会进行任何修改。
要回到原来的状态,请检查一个分支:

git checkout master

请参阅“为什么 git 分离了我的头? ”。

于 2013-05-14T09:41:22.690 回答
9

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

git checkout my-other-branch .

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

git reset HEAD

假设您从一个干净的状态开始,您现在的工作目录将处于与my-other-branch.

于 2016-03-16T15:12:46.320 回答
3

使用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这会将您的目录清理到上一次提交。

于 2013-05-14T13:32:37.123 回答