为什么“git bisect”分支不知道?

2024-03-02

我正在尝试找到自过去一天在一个长期存在的分支(将在很久以后发布)上提交以来出现的错误的来源,该分支称为特征-x.

但有一个错误。我发现我的脚本中没有预期的行为,到目前为止,这些行为可能已在任何提交中引入,特别是因为 master 的功能在 feature-x 中大量使用,但在 Master 本身上使用较少。

为了测试此行为,我必须运行我的脚本 dependent.pl。但是,当 bisect 跳转到代码的一半时,我的脚本在 Master 上不存在,因此无法测试。

我相信这是因为 bisect 将你拉入无头状态,但在这种情况下,我真的希望处于其他历史/变更集的背景中,而不是漂浮在以太中。

在任何人跳起来击中之前你这样做是错的蜂鸣器,我们的团队喜欢在这些情况下合并分支,因为这个比喻非常适合这种情况,而不是重新设置基础。

我将通过创建示例存储库来演示这一点:

git init

echo 'sub f { print $_; }' > main.pl
git add .
git commit -a -m "inital commit"

git branch feature-x
git checkout feature-x
echo 'main::f(1)' > dependent.pl
git add .
git commit -a -m "Starting work on feature X"
git tag dev-1.0

git checkout master
echo "sub f { return 1; }" > main.pl
git commit -a -m "sub f { return 1; }"
echo "sub f { return 2; }" > main.pl
git commit -a -m "sub f { return 2; }"
echo "sub f { return 3; }" > main.pl
git commit -a -m "sub f { return 3; }"

git tag release-1.0

git checkout feature-x
git merge master

echo 'print main::f();' > dependent.pl
git commit -a -m "Updating call to f"

所以现在你得到一个看起来像这样的存储库:

o Updating call to f ( Head of branch 'feature-x' )
o Merge branch master onto feature-x
|\
| o sub f { return 3; } (TAG release-1.0) ( Head of branch 'master' )
| o sub f { return 2; }
| o sub f { return 1; }
o | Starting work on feature X ( TAG 'dev-1.0' )
 \|
  o initial commit

所以我运行命令git bisect start feature-x dev-1.0期望我能够在 dependent.pl 中找到破坏我代码的内容,最终我提交了“sub f { return 2 }”,而没有我对 feature-x 的更改历史记录(即,如果我运行ls,我看到的只是 main.pl 和 dependent.pl 丢失了)。

这让我处于一种无法测试的状态。我不知道当前的提交是否破坏了我的工作,也不能说 master 上的提交破坏了它,所以我不能说这个提交是好还是坏。

我如何测试是什么破坏了我当前的分支?


这里的问题是 git bisectis分支意识。当你告诉它“依赖”是好的而“测试”是坏的,并且其中一个更改是合并提交时,它知道为了找出问题是在哪里引入的,它必须查看提交 a、b 和 c - 否则,它所能告诉您的只是它在合并提交时是否已损坏。

听起来您期望的是测试提交 b 与其他分支的更改的组合,这是任何提交中都不存在的内容,并且git bisect只让你测试提交!为了测试该内容,您必须进行一系列测试合并 - 检查 b,合并依赖,让您测试,然后检查 a 或 c,合并依赖,让您再次测试。你可以很容易地做到git merge --no-commit dependent一旦它离开你在提交b,然后做git reset --hard运行前完成测试后git bisect good/bad.

否则,如果我误解了你希望它不会测试any在合并分支上提交,并且只测试合并提交本身(你不关心 a、b 或 c 中的哪一个破坏了它),只需告诉它合并分支上的所有内容都是好的。如果您知道 a、b 和 c 与它无关,那就更好了。然后您甚至无需测试就知道它们很好!

但你不能期望的一件事是 git 完全忽略提交 a、b 和 c。它绝对无法知道它们的更改是否与您的“bug”相关,并且它们的更改是您的好提交和坏提交之间差异的一部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么“git bisect”分支不知道? 的相关文章

随机推荐

  • pandas 计算两个零之间不为零的值的数量

    我有以下数据框 0 0 0 1 0 0 1 1 0 1 1 1 1 1 1 0 0 0 0 1 0 0 1 0 0 0 0 你如何获得一个看起来像这样的数据框 0 0 0 4 0 0 4 3 0 4 3 2 4 3 2 0 0 0 0 2
  • 将tiny int 转换为int 时出错

    该错误看起来是由于在服务器上安装框架 4 5 引起的 尽管该项目的目标仍然是 4 0 4 5 取代了 CLR 看起来它在将tinyint 类型的对象拆箱为 int 方面发生了变化 这在 4 0 中可以工作 但安装 4 5 后就不行了 请在回
  • PHP72 MongoDB 驱动程序与 OSX 上的 Homebrew

    我有一个问题可能表明我对 Homebrew 与 MongoDB 存在误解 我正在 Mac OSX 10 12 6 Sierra 上运行带有 PHP 7 2 1 我想使用 的 XAMPP 版本 我安装了 MongoDB 并创建了配置和数据存储
  • Apache HttpClient 4.3 SocketConfig.getSoTimeout() 与 RequestConfig.getSocketTimeout()

    当建造一个CloseableHttpClient在 Apache HttpClient 4 3 中 我可以使用 SocketConfig custom setSoTimeout soTimeout build 并将其发送至setDefaul
  • 计算变换球体的 AABB

    我有一个在对象空间中由中心点和半径表示的球体 使用可能包括缩放 旋转和平移的变换矩阵将球体变换为世界空间 我需要为世界空间中的球体构建一个轴对齐的边界框 但我不知道该怎么做 这是我目前的方法 适用于某些情况 public void comp
  • Ruby Savon Gem 更改日志记录配置

    我尝试在针对 WSDL 运行 Savon 时更改其日志记录 但更改日志记录级别未成功 我阅读了文档 http rubiii github com savon global configuration http rubiii github c
  • 如果使用相同的数组作为两个参数,strcat() 会崩溃

    char r 40 strcpy r abcdef strcat r r 我的程序在第三行崩溃了 替换 strcat r r 通过 strcat r abcdef 不过工作正常 这是为什么 根据strcat 3 http linux die
  • Django 管理模板覆盖不起作用

    姜戈 1 6 11 应用程序结构如下所示 my project new app templates 在我的配置中 TEMPLATE ROOT os path join BASE ROOT templates TEMPLATE DIRS TE
  • 匹配枚举引用的语法是什么?

    似乎 Rust 的每一份介绍性文档枚举类型 https doc rust lang org book first edition enums html解释如何match https doc rust lang org book first
  • 如何将S3中的10,000个文件公开

    我的存储桶中有一个文件夹 其中包含 10 000 个文件 似乎没有办法立即上传并公开它们 所以我把它们全部上传了 它们是私人的 我需要将它们全部公开 我尝试过 aws 控制台 它只是给出一个错误 对于文件较少的文件夹工作正常 我尝试过在 F
  • 如何从您的脚本执行另一个 python 脚本并能够进行调试?

    您有包装器 python 脚本正在调用另一个 python 脚本 当前正在使用os system python another py some params 您希望能够调试这两个脚本 并且如果您使用os system 您将丢失调试器 因此使
  • C 扩展中 IO 有界线程的 GIL (HDF5)

    我有一个采样应用程序 它获取250 000每秒采样 将它们缓冲在内存中并最终附加到HDFStore由 提供pandas 总的来说 这很棒 但是 我有一个线程运行并不断清空数据采集设备 DAQ 并且它需要定期运行 大约一秒的偏差往往会破坏东西
  • React Native嵌套ListView在加载时多次触发onEndReached

    这是代码
  • Windows 文件关联是否正确完成?

    我想将我的应用程序设置为在 Windows 中具有文件关联 额外的复杂性 文件扩展名可能与其他一些不相关的应用程序冲突 处理这种情况的最佳方法是什么 用户很可能不会同时拥有这两者 但如果两者兼得 最好的处理方式是什么 我一直在网上搜索 st
  • 舍入 ** 0.5 和 math.sqrt

    在 Python 中 是 n 0 5 or math sqrt n 当一个数是完全平方数时被识别 具体来说 我应该担心当我使用 int n 0 5 instead of int n 0 5 0 000000001 由于精度误差 我可能会意外
  • gcc 在 Cygwin 上安装 Python MySQL 库失败

    我想安装oursql or MySQLdb在 Cygwin 盒子上 皮维基机器人 https www mediawiki org wiki Manual Pywikibot可以与任何一个一起工作 不幸的是两者easy install也pip
  • 如何在 Formik Validations Reactjs 中添加单选按钮?

    我正在使用 Formik 验证我的注册表单 我想通过单选按钮添加验证性别 我该怎么做 我无法添加单选按钮 这就是我所做的 const SignupSchema Yup object shape email Yup string email
  • 类库中的可移植 XAML 样式

    所以我有一个应用程序 其样式直接放入 App xaml 文件中 如下所示
  • 如何在Web API中获取POST数据?

    我以以下形式向服务器发送请求 http localhost 12345 api controller par1 par2 该请求被正确解析为如下方法 HttpPost public void object Post string par1
  • 为什么“git bisect”分支不知道?

    我正在尝试找到自过去一天在一个长期存在的分支 将在很久以后发布 上提交以来出现的错误的来源 该分支称为特征 x 但有一个错误 我发现我的脚本中没有预期的行为 到目前为止 这些行为可能已在任何提交中引入 特别是因为 master 的功能在 f