1

我正在尝试git bisect从已编辑的日志中重播一个以撤消我犯的错误。

我错误地将其中一个提交标记为好,而它本应该是坏的(反之亦然)。我跑了:

git bisect log > C:\temp\bisect.log
# Alternatively
git bisect log | Set-Content -Encoding ASCII C:\temp\bisect.log

然后我编辑了该文件以删除错误标记的提交和下面的所有行。

然后我跑了:

git bisect reset
git bisect replay c:\temp\bisect.log

我现在收到错误:

We are not bisecting.
Bisecting: 5211 revisions left to test after this (roughly 12 steps)
[9bc79b2f25a3724376d7af19617c33749a30ea3a] Merge branch 'release/2.1' into release/2.2
error: couldn't get the oid of the rev '9bc79b2f25a3724376d7af19617c33749a30ea3a?'

到底是怎么回事?我如何解决它?(为什么在修订的末尾有一个“?”?)

我在 Windows 10 上使用 git 版本 2.26.2.windows.1。我使用 PowerShell 7 作为我的 shell。

4

2 回答 2

1

git bisect replay在 2.27 版之前的 Git 中,无法处理 CRLF 分隔文件。最好的解决方法是升级到 Git 2.27+,我的贡献是修复这个.

PowerShell 对输出的按摩git bisect log将最初仅 LF 的输出转换git bisect log为 CRLF。您可以看到错误的 CR 出现在哪里:它是“?” 在错误消息中。

如果您无法升级您的 Git 副本,有多种方法可以避免这种情况:

  • 将文件从 CRLF 转换回 LF。
    • 如果您使用的是 PowerShell 5+,((Get-Content C:\temp\bisect.log ) -join "`n") + "`n" | Set-Content -NoNewline \temp\bisect-lf.log
  • 让您的文本编辑器在编辑期间使用 LF 保存文件。
  • 使用 CMD 而不是 PowerShell。然后,git bisect log > c:\temp\bisect.log不会更改换行符。

提示mklement0对 PowerShell 转换单线的回答。请参阅它以获取详细信息。

有一个建议添加一个-Delimiter参数到Set-Content. 如果实现了,这种转换会更简单。

于 2020-05-01T21:33:19.447 回答
1

Christopher Warrington 的 ( chwarr, OP) 补丁已合并到 Git 2.27 (Q2 2020) 中:“ git bisect replay” 在使用 CRLF 行结尾时出现输入文件问题,已更正。

请参阅Christopher Warrington ( ) 的提交 6c722cb(2020 年 5 月 7 日(由Junio C Hamano 合并 -- --提交 f9dbe28中,2020 年 5 月 14 日)chwarr
gitster

bisect:在“git bisect replay”输入中允许 CRLF 行结尾

签字人:克里斯托弗·沃灵顿

我们宣传平分日志可以在您的编辑器中更正,然后再输入“ git bisect replay”,但有些编辑器可能会将行尾转换为 CRLF。

更新输入行的解析器,以便忽略行尾的 CR。

如果有人故意使用带有嵌入式 CR 的术语/版本,那么重放此类对分将不再适用于此更改。我怀疑这是非常罕见的。

于 2020-05-16T22:01:11.353 回答