如何在Git重基期间签出特定的提交 我正处于一个中等水平。我正在重定基址的分支有很多更改,涉及我修改的相同代码。我花了很多时间在重基上,我几乎完成了。但是我在提交时添加了一个新功能,我现在正在处理这个功能,而这个功能已经不起作用了。我编写的这个特性类似于一个现有特性,我可以看到现有特性的功能被我正在重定基址的代码改变了

如何在Git重基期间签出特定的提交 我正处于一个中等水平。我正在重定基址的分支有很多更改,涉及我修改的相同代码。我花了很多时间在重基上,我几乎完成了。但是我在提交时添加了一个新功能,我现在正在处理这个功能,而这个功能已经不起作用了。我编写的这个特性类似于一个现有特性,我可以看到现有特性的功能被我正在重定基址的代码改变了,git,Git,我想找到更改现有功能的提交。在我第一次开始编写代码之前,我想先签出最后一次提交,以确保现有功能实际上已经更改。但是,当我尝试签出其他提交时,会出现一个错误,告诉我需要合并合并中当前步骤中的文件,并且需要首先解析当前索引。但在我弄清楚现有功能是如何修改的之前,我无法解析当前索引。我该怎么办?你的两条评论(至少到目前为止)是向前迈进的关键 出身背景 暂停(出于任何原因,包括交互式重基“编辑”选项)重基使工作树处于分离头部模式。这是一个稍微微妙的状态,在这里干扰HEAD设置是不明智的(其他分支或com

我想找到更改现有功能的提交。在我第一次开始编写代码之前,我想先签出最后一次提交,以确保现有功能实际上已经更改。但是,当我尝试签出其他提交时,会出现一个错误,告诉我需要合并合并中当前步骤中的文件,并且需要首先解析当前索引。但在我弄清楚现有功能是如何修改的之前,我无法解析当前索引。我该怎么办?

你的两条评论(至少到目前为止)是向前迈进的关键

出身背景 暂停(出于任何原因,包括交互式重基“编辑”选项)重基使工作树处于分离头部模式。这是一个稍微微妙的状态,在这里干扰
HEAD
设置是不明智的(其他分支或commit的
git checkout
就可以了)

由于合并冲突而暂停的rebase更糟糕:它不仅具有分离头模式,而且索引处于冲突状态。由于索引对于提交至关重要,因此使用此工作树可以做的唯一事情就是修复冲突并继续,或者终止重新基线并将所有内容恢复到开始的方式

您不希望执行以下操作:您希望完成重基,因为:

我花了很多时间在重基上,我几乎完成了

因此,解决方案是获得一个不同的工作树

再找一棵工作树 在现代Git中(从Git版本2.5开始),有一个命令,
Git worktree
,其中包含创建新工作树的子命令。每个工作树都有自己的
头和自己的索引。这意味着您可以将现有的存储库保持原样,保留正在进行的重基及其分离的头和可能存在冲突的索引,只需添加一个新的工作树,并签出另一个分支

自2.5版发布以来,git worktree中发现了许多bug;在修复Git2.15之前,我会避免过多地使用它。1但是,对于只查看不同的分支,即使是Git2.5版本也可以

如果您的Git早于2.5版本,或者您对上面的bug感到紧张,那么您可以简单地克隆现有的存储库。克隆比添加的工作树占用更多的磁盘空间和时间,但不会多出很多,而且在Git的每个版本中都可以使用



我自己也被这只虫子咬了。但是,值得注意的是,如果对象(那些
git-gc
可能认为未引用的对象)比prune过期时间(默认情况下为14天)早,那么它是无害的。短期的辅助工作树将不会触发这些
git worktree
错误(这一个和其他一些错误在2.5和2.15之间修复)。

在本地克隆您的repo,并临时对克隆进行操作,以检查您要检查的内容,然后完成重基并删除克隆?在继续并解决主工作目录中的重基之前,您可以将工作树签出到不同的目录中,并解决那里的问题。退房