git-cherry
查找尚未应用到上游的提交
概要
bash
git cherry [-v] [<upstream> [<head> [<limit>]]]描述
确定 <head>..<upstream> 中是否有与 <limit>..<head> 范围中的提交等效的提交。
等效性测试基于差异,在删除空白和行号之后。git-cherry 因此检测到通过 git-cherry-pick(1)、git-am(1) 或 git-rebase(1)"复制"的提交。
输出 <limit>..<head> 中每个提交的 SHA1,在 <upstream> 中有等效提交的前缀为 -,没有的前缀为 +。
选项
-v
在 SHA1 旁边显示提交主题。
<upstream>
搜索等效提交的上游分支。默认为 HEAD 的上游分支。
<head>
工作分支;默认为 HEAD。
<limit>
不报告直到(包括)limit 的提交。
示例
补丁工作流程
git-cherry 经常在基于补丁的工作流程中使用(参见 gitworkflows(7))以确定一系列补丁是否已被上游维护者应用。在此类工作流程中,你可以创建并发送主题分支,如下所示:
bash
$ git checkout -b topic origin/master
# 工作并创建一些提交
$ git format-patch origin/master
$ git send-email ... 00*稍后,你可以通过以下方式查看你的更改是否已被应用(仍在 topic 上):
bash
$ git fetch # 更新你对 origin/master 的认知
$ git cherry -v具体示例
在 topic 由三个提交组成且维护者应用了其中两个的情况下,情况可能如下:
bash
$ git log --graph --oneline --decorate --boundary origin/master...topic
- 7654321 (origin/master) upstream tip commit
[... 省略一些其他提交 ...]
- cccc111 cherry-pick of C
- aaaa111 cherry-pick of A
[... 省略更多发生的事情 ...]
| * cccc000 (topic) commit C
| * bbbb000 commit B
| * aaaa000 commit A
|/
o 1234567 branch point在这种情况下,git-cherry 显示了尚未应用的内容的简明摘要:
bash
$ git cherry origin/master topic
- cccc000... commit C
+ bbbb000... commit B
- aaaa000... commit A这里,我们看到提交 A 和 C(标记为 -)可以在将 topic 分支变基到 origin/master 之上时从你的 topic 分支中删除,而提交 B(标记为 +)仍需要保留以便将其发送到 origin/master。
使用限制
可选的 <limit> 在你的 topic 基于不在上游的其他工作时很有用。
另请参阅
Git
git(1) 套件的一部分
