首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在git-rebase TODO编辑器会话中查看更多日志行?

如何在git-rebase TODO编辑器会话中查看更多日志行?
EN

Stack Overflow用户
提问于 2021-01-31 23:51:20
回答 2查看 162关注 0票数 1

当你使用git rebase -i 1234abcd时,你会得到一个编辑器会话,其中包含“TODO”列表,用于rebase:对于每个相关的变更集需要做什么。

现在,默认情况下,我们每次提交都会看到一行--提交消息的第一行。然而,我们中的一些人编写了多行提交消息,其中第一行没有说太多。

有没有可能通过某种方式让git在TODO编辑器中打印额外行的内容?我不介意确切的格式,我只需要区分不同的提交来知道我在做什么。

EN

回答 2

Stack Overflow用户

发布于 2021-02-01 03:28:05

不幸的是,我认为这是不可能的。定制rebase输出的唯一方法是通过rebase.instructionFormat配置,如下所示:

代码语言:javascript
复制
git config rebase.instructionFormat "..."

我也尝试使用选项%B返回主体的主题,但rebase操作失败,并显示以下错误:

代码语言:javascript
复制
error: invalid line 5: second line
error: invalid line 7: third line
error: invalid line 8: forth line
BUG: builtin/rebase.c:353: unusable todo list
Aborted (core dumped)

似乎git将第一行之后的代码视为可执行代码。我查看了git log文档,但在--format选项中,我没有看到任何可以用其他内容替换换行符的内容,或者干脆忽略它。

此时,您可以克隆存储库,运行git filter-branch将换行符替换为空格,最终运行git rebase -i

代码语言:javascript
复制
git filter-branch --msg-filter "xargs echo"

交互式rebase不考虑“第三列”,基本上就是您选择记录某个提交的内容,所以在最后,您可以在主repo的编辑器中将交互式rebase的输出复制并粘贴到第二个repo (您使用filter-branch编辑的那个)上。

不管怎样,我刚找到一个和你的相似的question

编辑:如果您想要另一个工具来格式化新的提交消息,您总是可以创建一个脚本,就像下面这样用\n替换换行符

代码语言:javascript
复制
#!/bin/bash
cat | sed ':a;N;$!ba;s/\n/\\n/g'

并将其称为inside --msg-filter选项

代码语言:javascript
复制
git filter-branch --msg-filter "cat | $(pwd)/script.sh"

编辑:我几乎忘记了filter-branch会重新创建与指定过滤器匹配的每个提交,因此,在编辑之前,您应该用主存储中的真实提交替换克隆存储库中交互式rebase输出的提交列。它变得比我想象的更乏味。让我们回到简单的事情上:我们可以模拟一个交互式的rebase,而不需要实际调用它。脚本可以改进,但我认为方向是正确的:

代码语言:javascript
复制
#!/bin/bash
for commit in $(git rev-list $1..HEAD | tac)
do
    git log -n 1 $commit --format="pick %h %B" | xargs echo
done;

你这样称呼它

代码语言:javascript
复制
./script HEAD~3

并获得交互式的rebase输出(某种程度上,没有注释)

代码语言:javascript
复制
pick 483ac92 first commit
pick bb739b7 second commit
pick 59f2bf0 very long commit with multiline
票数 3
EN

Stack Overflow用户

发布于 2021-02-01 05:47:09

然而,我们中的一些人编写了多行提交消息,其中第一行没有说太多。

该行旁边是缩写的修订版散列。假设您使用的是vim或兼容的,只需输入命令:感叹号、git空格、显示空格、散列并按回车键:

代码语言:javascript
复制
:!git show 1234abcd

然后,您将看到提交的主题行,这对您来说并不重要,然后是提交消息。

如果提交消息的正文不够,这还将显示更改的路径和更改的差异。

如果您使用的是其他编辑器,请查看有关如何在编辑器中执行shell命令的文档。在交互式rebase时,工作目录是启动当前交互式rebase的git存储库的工作树的根目录。

存在其他工具,例如,您可能想要在另一个窗口中打开gitk来引导您的交互式rebase。按g键输入修订并跳转到该修订。

另请参阅A Note About Git Commit Messages (由Tim Pope撰写;2008年4月)。

提示:考虑使用交互式rebase重新编写这些提交消息,它们的主题行不会对您产生太大影响,直到它们第一次这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65981098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档