git - git log range 排除多个基本引用的祖先
问题描述
我经常git log <options> BASE..TARGET
用来显示一系列提交。
这是做什么的,根据我以前的经验和理解:
- 包括 TARGET 及其所有祖先。
- 排除 BASE 及其所有祖先,即使它们是 TARGET 的祖先。
有时我想实现以下目标:
- 包括 TARGET 及其所有祖先。
- 排除 BASE_0 及其所有祖先,即使它们是 TARGET 的祖先。
- 排除 BASE_1 及其所有祖先,即使它们是 TARGET 的祖先。
- 排除 BASE_2 及其所有祖先,即使它们是 TARGET 的祖先。
- ...
一个典型的用例是查找给定功能分支(= 祖先)中的提交,但既不在主分支(= 祖先)中,也不在特定的其他功能分支中。
显然,范围 A..B 语法不会在这里削减它。相反,需要有一个类似 的参数--exclude-ancestors-of=A_0,A_1,A_2
,其语法允许多个引用。
这有可能吗?
解决方案
正如jthill 评论的那样,您可以用以下方式表达这一点:
git log TARGET ^BASE_0 ^BASE_1 ^BASE_2
(这些可以按任何顺序排列)。如果你有很多否定引用——上面的表达式是否定引用——你可以简化一下输入:^BASE_number
git log TARGET --not BASE_0 BASE_1 BASE_2
--not
告诉 Git所有后续的说明符都将被否定。 第二个--not
否定否定,回到积极的引用,所以你可以——对于这个例子有点毫无意义——写:
git log --not BASE_0 BASE_1 BASE_2 --not TARGET
也是。
在 Git中有很多表达修订和修订范围的方法;请参阅gitrevisions 文档(或git help revisions
)以获得相当完整的列表。请注意,两点和三点语法在几个命令中可能具有不同的含义。该git diff
命令是这方面最重要的例子。查阅每个特定 Git 命令的手册页,看看它对该命令是否有特殊含义,如果有,含义是什么。
推荐阅读
- google-cloud-platform - Google Speech API 的最佳采样率是多少?有 Google 员工或专家可以发表评论吗?
- python - 如何使用烧瓶有效地将大型 csv 文件加载到 html 表中?
- sql - Microsoft Access - 如何将数据导入现有表并更新数据
- performance - 每次点击都进行 API 调用是个好主意吗?
- microsoft-graph-api - Teams Graph API,从每个 Teams 频道检索文件
- android - 如何使用 Testcafe 测试推送通知
- angularjs - 在 AngularJS 中没有更改检测的降级 Angular 组件
- alwayson - 事务日志备份在从 Always on 移除后不会收缩 - log_reuse_wait_desc“可用性副本”
- python - 完成我的任务的正确语法是什么?
- python - Calculate column-wise mean of rows of a numpy matrix selected using values from another array