Spec-Zone.ru › Git

git-cherry

Имя

git-cherry - Найти коммиты, которые еще не были применены к upstream

Синтаксис

git cherry [-v] [<upstream> [<head> [<limit>]]]

Описание

Определить, есть ли коммиты в <head>..<upstream> , эквивалентные тем, что в диапазоне <limit>..<head>.

Тест на эквивалентность основан на diff после удаления пробелов и номеров строк. Таким образом, git-cherry обнаруживает, когда коммиты были "скопированы" с помощью git-cherry-pick[1], git-am[1] или git-rebase[1].

Выводит SHA1 каждого коммита в <limit>..<head>, предваряя его - для коммитов, у которых есть эквивалент в <upstream>, и + для коммитов, у которых нет.

Параметры

-v

Показать темы коммитов рядом с SHA1.

<upstream>

Ветка upstream для поиска эквивалентных коммитов. По умолчанию используется ветка upstream от HEAD.

<head>

Рабочая ветка; по умолчанию HEAD.

<limit>

Не сообщать коммиты до (и включая) предела.

Примеры

Рабочие процессы с патчами

git-cherry часто используется в рабочих процессах с патчами (см. gitworkflows[7]) для определения, была ли серия патчей применена хранителем upstream. В таком рабочем процессе вы можете создать и отправить ветку темы так:

$ git checkout -b topic origin/master
# work and create some commits
$ git format-patch origin/master
$ git send-email ... 00*

Позже вы можете узнать, были ли ваши изменения применены (все еще на topic):

$ git fetch  # update your notion of origin/master
$ git cherry -v

Конкретный пример

В ситуации, когда тема состояла из трех коммитов, а хранитель применил два из них, ситуация может выглядеть так:

$ git log --graph --oneline --decorate --boundary origin/master...topic
* 7654321 (origin/master) upstream tip commit
[... snip some other commits ...]
* cccc111 cherry-pick of C
* aaaa111 cherry-pick of A
[... snip a lot more that has happened ...]
| * 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

Здесь мы видим, что коммиты A и C (отмеченные -) можно удалить из вашей ветки topic, когда вы её перебазируете на origin/master, в то время как коммит B (отмеченный +) все еще нужно сохранить, чтобы отправить его для применения к origin/master.

Использование ограничения

Необязательный параметр <limit> полезен в тех случаях, когда ваша тема основана на другой работе, которая отсутствует в upstream. Развивая предыдущий пример, это может выглядеть так:

$ git log --graph --oneline --decorate --boundary origin/master...topic
* 7654321 (origin/master) upstream tip commit
[... snip some other commits ...]
* cccc111 cherry-pick of C
* aaaa111 cherry-pick of A
[... snip a lot more that has happened ...]
| * 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-patch-id[1]

cherry

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-cherry

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API