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
См. также
cherry
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-cherry