简体中文 ▾
Localized versions of git-cherry manual
Topics ▾
Email
Latest version
▾
git-cherry last updated in 2.0.5
Changes in the git-cherry manual
Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.1.4 → 2.47.1 no changes
- 2.0.5 12/17/14
描述
确定 <head>...<upstream>
中是否有与 <limit>...<head>
范围内的提交相等。
因此,git-cherry 通过 git-cherry-pick[1]、git-am[1] 或 git-rebase[1] 来检测提交是否被 “复制” 了。
输出 <limit>...<head>
中每个提交的 SHA1,对于在 <upstream> 中有对应的提交,以 -
为前缀,对于没有对应的提交,以 +
为前缀。
实例
补丁工作流程
git-cherry 常用于基于补丁的工作流程(见 gitworkflows[7]),以确定一系列补丁是否已被上游维护者应用。 在这样的工作流程中,你可能会创建并发送一个类似这样的主题分支:
$ git checkout -b topic origin/master # 工作,并创建一些提交 $ git format-patch origin/master $ git send-email ... 00*
后来,你可以通过说(仍然是在 `topic`上)看到你的修改是否被应用:
$ git fetch # 更新您的 origin/master $ git cherry -v
具体实例
如果话题由三个提交组成,而维护者应用了其中的两个提交,情况可能是这样的:
$ 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 会显示一个简明的摘要,说明还有哪些地方需要应用:
$ git cherry origin/master topic - cccc000... commit C + bbbb000... commit B - aaaa000... commit A
在这里,我们看到,当你在 origin/master
之上重新建立分支时,可以从 topic
分支中删除 A 和 C(标有 -
),而 B(标有 +
)仍然需要保留,这样它就会被发送到 `origin/master `上应用。
使用一个限制
可选的 <限制> 在你的主题是基于其他不在上游的工作的情况下很有用。 在前面的例子基础上扩展,这可能看起来像:
$ 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 | * 0000fff (base) unpublished stuff F [... snip ...] | * 0000aaa unpublished stuff A |/ o 1234567 merge-base between upstream and topic
通过指定 base
作为限制,你可以避免列出 base
和 topic
之间的提交:
$ git cherry origin/master topic base - cccc000... commit C + bbbb000... commit B - aaaa000... commit A
GIT
属于 git[1] 文档