使用Git显示所有一级后代分支

2023-11-26

如何获取当前 HEAD 的一级后代分支的列表?

我可以通过以下方式获取整棵树的列表:

git log --graph --abbrev-commit --pretty=decorate --branches

这使

* 2eff4a7... (refs/heads/issue-8351) Added a factory factory factory.
* 2e387aa... Refactored all of the factory factories.
| * b3fad52... (refs/heads/issue-8354) Moved the baz out of the constructor.
|/
| * f4cf3fe... (refs/heads/experimental) quuz looking good
| * 1d276b9... Risky fix to replace the quux with the quuz.
| * d6b0222... (refs/heads/issue-7559) Fixed the quux in the foo.
|/
| * 3f4cfff... (refs/heads/dev) wip
|/
* 76f493f... (refs/heads/master) SVN 30192

但我只想获得当前分支的第一级子级的简单列表,就像这个例子master:

dev
issue-7559
issue-8354
issue-8351

如果我在树枝上issue-7559我只会看到:

experimental

我该怎么办?


您可以按如下方式进行操作。

首先是通常的序言:

#! /usr/bin/perl

use warnings;
use strict;

Use git for-each-ref收集每个引用的 SHA-1 和名称:

sub refs {
  open my $fh, "-|", "git", "for-each-ref",
                            "--format=%(objectname)\t%(refname:short)"
    or die "$0: failed to run git for-each-ref";

  my %ref2sha;
  while (<$fh>) {
    chomp;
    my($sha,$ref) = split /\t/;
    $ref2sha{$ref} = $sha;
  }

  \%ref2sha;
}

如果提交是子项HEAD,可从以下位置到达的提交集HEAD排除从有问题的提交中可到达的所有内容就是空集。我们可以检查这种关系git rev-list.

sub is_child {
  my($ref) = @_;

  # git rev-list ^dev master
  my $refs = `git rev-list ^$ref HEAD -- 2>&1`;
  die "$0: git rev-list-failed.\n$refs" if $?;

  $refs !~ /\S/;
}

对于每个 ref 的后代HEAD但它不等于HEAD,我们检查来自的路径HEAD到该参考使用git log。如果路径包含另一个分支的尖端,则 ref 不能是第一级子级。

所有这场挑战的幸存者都是一级子弟。

chomp(my $head = `git rev-parse HEAD 2>&1`);
die "$0: git rev-parse failed.\n$head" if $?;

my $ref2sha = refs;
my %headsha = reverse %$ref2sha;

REF:
foreach my $ref (keys %$ref2sha) {
  my $refsha = $ref2sha->{$ref};

  next if $refsha eq $head || !is_child $ref;

  my @log = `git log --pretty=format:%H ..$ref 2>&1`;
  die "$0: git log failed.\n@log" if $?;
  for (@log) {
    chomp;
    next if $_ eq $refsha;
    next REF if exists $headsha{$_};
  }

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

使用Git显示所有一级后代分支 的相关文章

  • 快速 Perl signint 处理程序

    收到 Ctrl C 时处理程序清理的最方便 最清晰的方法是什么 例如 当我的套接字服务器以这种方式被终止时 TCP 套接字永远不会关闭 我想要一个很好的衬里 我可以将其放在程序的顶部来设置 sigint 处理程序 或类似 atexit 的东
  • Perl 和 Selenium::远程::驱动程序

    再次编辑 我在弗吉尼亚州北部某处的 AWS 上有一台服务器 这是我的监控服务器 我从另一个状态 ssh 进入这个 Ubuntu 服务器来进行系统管理 我想在这台服务器上进行 Web 自动化测试 它将测试互联网上的 Web 应用程序 点击 U
  • git 2.32 git push -u origin master 没有任何反应

    I ve starting to use git github and I m stucked on how to push my codes to github I m following some tutorials and when
  • 如何在 Perl 中使用原始套接字?

    你怎样才能得到一个rawPerl 中的套接字 那么构建与其一起使用的数据包的最佳方法是什么 与在 C 中执行的操作相同 通过在创建套接字时设置套接字类型 在示例中CPAN http search cpan org rgarcia perl
  • VSTS:在构建过期的情况下自动变基/合并和重新排队构建验证门

    我们最近对 PR 上的构建验证门进行了更改 这样 如果另一个提交在当前 PR 完成之前进入主分支 则构建会 立即 过期 看here https stackoverflow com questions 49418800 vsts invali
  • Perl 程序如何知道在哪里可以找到包含它使用的 Perl 模块的文件?

    如果我的 Perl 程序使用 Perl 模块 它将如何确定在哪里找到包含模块代码的文件 例如 如果程序包含 use MyModule1 Example 1 use This Here MyModule2 Example 2 它会看起来在哪里
  • Perl regex:如何知道匹配数

    我循环遍历一系列正则表达式并将其与文件中的行进行匹配 如下所示 for my regex regexs ref LINE for rawfile regex do do something here next LINE 有没有办法让我知道我
  • 如何在 Perl 脚本中加密或隐藏密码?

    我正在研究 Perl 脚本 它使用Expect http search cpan org dist Expect通过 telnet 登录到远程计算机 不要问 必须使用 telnet 我还根据需要执行 perforce p4 登录操作 并使用
  • 尝试克隆一个 git 存储库,但它卡在克隆到中

    我使用的是 Windows 10版本 10 0 19042 内部版本 19042 GIT Ver 2 32当尝试使用 git bash 执行以下命令时git clone depth 1 b carla https github com Ca
  • 如何诊断和修复 git fatal: 无法读取树

    我在用着git管理项目上的文件 并不断遇到这个问题 当我跑步时git status我收到消息 fatal unable to read tree e2d920161d41631066945a3cbcd1b043de919570 据我了解 我
  • 哪些 git hooks 适用于“git rebase --continue”?

    我正在尝试为我的组织构建一组 git hook 脚本 我想使用的一个脚本 仅用于我自己的多个项目 将是检查git rebase continue我的代码中没有留下任何冲突标记 lt lt lt lt lt or gt gt gt gt gt
  • 如何在 Perl 字符串中手动插入字符串转义符?

    在perl中假设我有一个像这样的字符串 hello tworld n 而我想要的是 hello world 也就是说 hello 然后是文字制表符 然后是 world 然后是文字换行符 或者等价地 hello tworld n 注意双引号
  • git-lfs 中的多个文件版本

    我正在尝试估计 GitHub 上我的项目的存储要求 并对 git lfs 如何存储多个版本的文件有一些疑问 git lfs 是否存储多个版本的文件 如果是这样 对文件的每次更改都会导致复制整个文件 还是仅存储差异 所有版本都会计入 gith
  • 如何使用“子例程引用”作为哈希键

    在 Perl 中 我正在学习如何取消引用 子例程引用 但我似乎无法使用子例程引用作为哈希 键 在下面的示例代码中 我可以创建对子例程 subref 的引用 然后取消引用它以运行子例程 subref 我可以使用引用作为哈希 值 然后轻松取消引
  • git push --force-with-lease 总是安全吗?

    我一直遵循的规则是 一旦 git 历史记录被推送到远程存储库 就不再修改它 但我想知道交互式变基到推送 force with lease 是否绕过了这条规则 如果强制租约成功 对其他用户来说是否完全安全 或者此策略有任何注意事项吗 预先感谢
  • 如何修改 git add 来处理已删除的文件?

    我从 git 存储库中删除了一些文件 现在 根据状态查看 Changes not staged for commit deleted project war favicon ico deleted project war index htm
  • 使用 git 子树时如何添加特定文件夹?

    我正在开发一个复杂的 Ionic 项目 我正在开发的许多组件和提供程序都是通用的 可以在我公司正在进行的其他项目中使用 这在软件开发中很常见 这是我提出的 Git 工作流程 该图显示了分支 my company library repo c
  • 仅使用 git 存储未暂存的更改(不是 --keep-index)

    首先 我确实知道 keep index 这不是我想要的 因为它仍然隐藏着all更改 但将暂存的更改保留在工作树中 如果可能的话 我只想存储未暂存的文件 而无需再次添加所有更改git stash patch 如果您想存储索引 已暂存的内容 和
  • Gitlab 备份错误:包对象因信号 9 死亡

    我有一个存储库 有 2 个分支 大小为 3 5GB 每个分支大约 1 5GB git 本身就有 700MB 这是错误 备份失败 失败的 失败 opt gitlab embedded bin git git dir mountdata git
  • 如何从 Git 存储库中删除选定的提交日志条目,同时保留其更改?

    我想从线性提交树中删除选定的提交日志条目 以便这些条目不会显示在提交日志中 我的提交树看起来像 R A B C D E HEAD 我想删除 B 和 C 条目 以便它们不会显示在提交日志中 但应保留从 A 到 D 的更改 也许通过引入单个提交

随机推荐

  • 使用 SWT 创建自定义按钮

    我想问同样的事情这个问题但使用SWT 有没有办法用自己的按钮图形制作按钮 而不仅仅是在按钮内添加图像 如果不是 还有另一种在java中创建自定义按钮的方法吗 public class ImageButton extends Canvas p
  • 将 hdf5 matlab 字符串加载到 Python 中

    我在使用 Python 读取 hdf5 matlab 7 3 文件时遇到麻烦 我正在使用 h5py 2 0 1 我可以读取文件中存储的所有矩阵 但无法读取字符串列表 h5py 将字符串显示为形状 1 894 类型 04 的数据集 该数据集包
  • 使用 jQuery 对表列进行拖放排序

    我正在使用 jQuery 来驱动我的 AJAX UI 我有一个数据表 我希望允许用户通过拖放来重新排序表中的列 我希望用户能够抓住列的标题并移动它 下面应该是下面的数据行 请注意 我是not对数据排序或对行重新排序感兴趣 但希望允许用户更改
  • 以编程方式创建带有 NSMenuItems 的 NSMenu?

    首先 我想指出这个问题可能已经被问过 我只是找不到他们的任何答案 因此 我正在尝试以编程方式为主栏创建 NSMenu 和 NSMenuItem 所以 fe NSMenu 将是文件 然后它会包含 3x NSMenuItem 新建 打开和保存
  • 是否可以通过我的应用程序与 iOS 5 的提醒应用程序进行交互?

    有没有办法从新的 iOS 5 内置提醒应用程序中添加 读取或删除提醒项目 这些提醒不在公共 API 上 创建的 地理围栏 对某些进程可见 我在控制台日志中看到了围栏计数 但其他应用程序无法访问 您只能将栅栏注册到您自己的应用程序
  • ObjC / iOS - 将每个单词的第一个字母大写而不修改其他字母

    有没有一种简单的方法来转换字符串 迪诺 麦库尔 到一个字符串 迪诺 麦库尔 使用 capitalizedString 我会得到的方法 Dino Mccool 您可以枚举字符串的单词并单独修改每个单词 即使单词被空格字符以外的其他字符分隔 这
  • 如何强制刷新 WPF 绑定?

    我有一个组合框 其中使用简单绑定附加了项目源 加载组合框后有什么方法可以刷新此绑定吗 您可以使用绑定表达式 private void ComboBox Loaded object sender RoutedEventArgs e Combo
  • 如何让 MSBuild 完成相当于 dcc32 -b 的 Delphi 项目的完整构建?

    如何让 MSBuild 完成相当于 dcc32 b 的 Delphi 项目的完整构建 我有两个项目正在尝试构建 第一个项目使用一些条件定义 这些定义通过 msbuild 传递到 dcc32 然而 一些常见单元似乎被第一组条件所困扰 因此第二
  • 如何使用 EclipseLink 进行 join fetching 而不是 select fectching?

    我有一个OneToOne两个实体之间的关系 默认情况下 这种关系是急切的 但是在记录请求时 我只看到多项选择 无连接出现 强迫渴望时也是如此 你知道如何告诉 eclipselink 使用 join fetching 如 hibernate
  • WPF中如何实现双向数据绑定?

    我听说过很多有关 WPF 中双向绑定的内容 但我并不完全清楚如何实现它或它的实际含义 我有一个ListView里面有一堆物品 当用户选择一个新项目时 TextBox应用程序中将更改其文本以显示所选项目的某些属性 但是当用户更改文本框中的文本
  • batchUpdate 调用如何计入使用限制?

    打电话就像spreadsheets batchUpdate and spreadsheets values batchUpdate可以在一次调用中执行多个更新操作 我读到了关于 google Sheets api 使用限制的信息https
  • 是否可以在 Visual Studio 中以编程方式清除输出窗口?

    您知道如何添加一些代码吗 调试期间 以编程方式清除输出窗口在视觉工作室中 或者您知道一些快速的替代方案 例如快捷键 Macro Sub ClearOutputWindow DTE ExecuteCommand Edit ClearOutpu
  • 如何根据用户滚动加载网页内容

    如何在用户滚动网页时加载内容 如何实施 一般来说 您需要有某种像这样的结构 first page of content first page of content first page of content first page of co
  • 为什么 NumPy int 不是 Python int 的实例,但 NumPy float 是 Python float 的实例?

    考虑以下 gt gt gt import numbers gt gt gt import numpy gt gt gt a numpy int 0 gt gt gt isinstance a int False gt gt gt isins
  • 如何使用 Android 导航组件将值传递回先前的片段目的地?

    让 sat 我有一些这样的目的地 从片段A gt 到片段B gt 到片段C 我可以使用安全参数将数据从片段 A 传递到片段 B 也可以使用安全参数从片段 B 传递到片段 C 如果我想将片段 C 中生成的字符串带回片段 B 或片段 A 该怎么
  • Java 8 重复键的流总和条目

    我使用 Java 8 流按某个键对条目列表进行分组 然后按日期对组进行排序 此外 我想做的是 折叠 组中具有相同日期的任何两个条目并将它们相加 我有一个这样的课程 出于示例目的而被精简 class Thing private String
  • xcode 多合一布局:在项目和调试页面之间切换的键盘快捷键?

    当您将 xcode 配置为使用 All in one 布局时 会出现一个切换开关 允许您在项目和调试 模式 之间切换 IDE 调用这些页面 是否有键盘快捷键可以执行切换 Project Cmd 0 zero Build Cmd Shift
  • 我可以同时安装 Ruby on Rails 2.x 和 Ruby on Rails 3

    我有一个 Ubuntu Rails 环境来使用 ROR 现在我正在运行 Rails 2 3 8 我想研究一下 Rails 3 是否可以并行运行两个开发环境 如果没有 如何清理 Rails 2 x 系统以安装 Rails 3 或者我需要安装一
  • 在 SQL Server 中保存日期

    我有一个遗留应用程序 其中输入是日期字符串 即 2009年6月12日 输入的格式始终是字符串 并且是一致的 始终是 dd mm yyyy 目前 遗留应用程序只是将其插入日期时间字段中 显然 如果服务器的本地化文化设置发生变化 我们有一个错误
  • 使用Git显示所有一级后代分支

    如何获取当前 HEAD 的一级后代分支的列表 我可以通过以下方式获取整棵树的列表 git log graph abbrev commit pretty decorate branches 这使 2eff4a7 refs heads issu