那么,我刚刚开始使用Git,作为一个快乐的(可能是相当肤浅的)TortoiseHG用户,已经很多年了。
自从上次一个特定的东西在代码中工作以来,我已经连续提交了10次左右,其中大约一半的提交都在我的可疑列表中,因为引入了这个问题。挑战在于,最后两次提交解决了一个不同的问题,这个问题阻止了我的测试工作,因此它们必须保持活动状态,否则我甚至不能运行测试,事情就变得复杂了。
我想要禁用"在我的本地repo中的疑点,例如,更新我的工作目录到如果没有进行这5次提交的状态,并运行一些测试,然后单独启用/禁用它们,看看哪里出了问题。
我知道我可以恢复单个提交,但这会变得乏味,并且会增加额外的更改,然后需要随着搜索的进展而提交/恢复。如果没有应用提交的某个子集,似乎没有一个函数产生一个包含状态的工作目录。
但是似乎应该有一种方法来创建一个本地分支(我可以删除一旦完成,永远不会推送到服务器),它只包含我认为已经安全的提交,然后我可以一个接一个地添加可疑的提交,看看什么时候事情发生了。
正确吗?如果是,我该怎么做?如果不行,还有别的办法吗?
我目前正在Linux上测试git的各种GUI客户端-所以解决方案可以通过这些客户端的GUI应用,而不需要花哨的特定命令行参数。
我建议使用交互式的rebase,它将允许您重新排序,甚至删除有问题的提交。
命令:git rebase -i <last known good commit>
文档:https://git-scm.com/docs/git-rebase
其他选项可以是创建一个补丁/存储的最后两个提交,你需要使测试工作,然后使用git bisect正常,而不是直接运行测试,你做:
git stash pop
run test
git stash
git bisect <test result>
祝你好运!我猜在"TortoiseHG"表示Mercurial,这可能解释了这里心智模型的差异:与Mercurial不同,在git中的提交不代表更改. 相反,它表示在特定时间的整个存储库的快照。. git不是通过一系列的变化来构造状态,而是通过比较状态来构造变化。
鉴于此,"禁用提交"的概念在git中没有意义——只有一个提交对工作副本有贡献,那就是你当前签出的那个。
按照的顺序浏览提交并测试它们是非常容易的——你可以通过它的提交哈希来检查任何提交,并且你的工作副本将反映提交的状态。你也可以使用git bisect在一个长的提交列表中执行二进制搜索,而不是按顺序测试每个提交。
如果您想测试更改的组合,您将需要创建带有这些组合的临时分支,然后将它们丢弃。例如:
- 创建临时分支
- 使用
git reset --hard some_revision_hash
指向(并签出)特定的修订 - 使用git cherry-pick重新创建一个或多个后续提交所做的更改 测试
- 转到步骤3添加更多更改,或步骤2从不同的基点开始