LINUX.ORG.RU

Cherry-pick


1

1

Я начинающий пользователь ubuntu, а уж git'a и подавно. Поэтому, будьте так любезны, подскажите есть ли команда которая может собрать cherry-pick'и с разных веток одной командой.

Например:

У меня есть ветка «Х» - в которую я хочу перенести последние комиты из веток.

Из ветки «А» - 3 комита

Из «В» - 4

А из «С» - 2.

Просто если ветки 3, то это сделать не в тягость, а если их например 15 или более.... Сильно утомлят.

Помогите если сможете

А по какому принципу коммиты-то переносить? Какие-то конкретные? Можно сделать список хэшей, и по нему пройтись скриптом

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Мне нужны комиты которые были сделаны после Merge. Если ты мне подскажешь как сюда скрин вставить, то я покажу, что имел ввиду.

Kastamat
() автор топика
Ответ на: комментарий от Kastamat

По ходу, тебе надо просто смержить N бранчей в мастер.

Если повезёт, это можно сделать простейшим однострочником, но, как правило, так не везёт, и где-то посередине выскочат конфликты.

yoghurt ★★★★★
()
Ответ на: комментарий от Kastamat

Что-то тут не так. Скорее всего проще один раз осилить руками и больше так не делать. Ну или как советовали наскриптовать.

anonymous
()
Ответ на: комментарий от Kastamat
git cherry-pick HASH1 HASH2 ... HASHN

Можно проще, но это уже зависит от конкретного расположения звёзд на небе коммитов в бранчах относительно хэда в мастере. За примерами - в ман.

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Именно так я и делаю, но веток иногда бывает слишком много и я боюсь что нить упустить, по несколько раз перепроверяю. Долго выходит.

А хочется чтобы одной командой и оп! http://s03.radikal.ru/i176/1407/f9/10d9e15ab294.png Чтобы как на русунке. А со скриптами я пока не дружу(((

Kastamat
() автор топика
Ответ на: комментарий от Kastamat

А куда уж проще? Нельзя это сделать более просто, чем перечислив нужные коммиты.

Если ты ищешь GUI для этого — попробуй gitk.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

gitk просто показывает комиты и изменения.

Есть интересная команда. Вот: custom-branch-create A B C «Изменения из ветки A.»

результатом выше приведённой команды будет: создание ветки C , отколотой от B c одним коммитом, содержащим все изменения из коммитов A.

Просто думал, что есть что нить подобное для переноса комитов cherry-pick'ом

Kastamat
() автор топика
Ответ на: комментарий от Kastamat

// опечатался — не -b -f, а -B

А где здесь ветка B и «коммиты A»? Я не совсем понимаю поставленный вопрос.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Моя пробле ма вот в чём. Мне нужна команда , которая перенесёт черипиком все комиты, которые были после merge веток как показао на рисунке это комиты А4 и А5 + чтобы они были строго в заданном порядке. А самое главное, чтобы в команде указывать не сами комиты, а ветку с которой их надо забрать. Приблизительно она должна выгледеть как то так: Супер чери-пик (далее указывать ветки с которой брать комиты, именно ветки, а не комиты)(команда должна брать те комиты, которые были после мерджа в тех ветках из которых их берут), а в конце ветку в которую их скинуть. Ну как то так. Знаю, что многого хочу, но у меня всё еще есть надежда, что такая команда существует!

Kastamat
() автор топика
Ответ на: комментарий от Kastamat

После какого мерджа? Просто «после последнего мерджа в ветке»? Или всё-таки мердж был из какого-то определённого места?

intelfx ★★★★★
()
Ответ на: комментарий от Kastamat

Тогда это не решается средствами Git как такового. Вот тебе bash-скрипт, который, надеюсь, делает то, что нужно.

#!/bin/bash

set -e

git checkout "$1"
shift

for arg; do
	git cherry-pick "$(git log --pretty=format:%H --date-order --merges -1 "$arg")..$arg"
done

Первым аргументом — целевая ветка, дальше — откуда черри-пикать (порядок, естественно, имеет значение).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 5)
Ответ на: комментарий от intelfx

Я проверю и отпишусь, но заранее спасибо за помощь.

Kastamat
() автор топика
Ответ на: комментарий от Kastamat

Пресвятой ММ, можешь рассказать что за процесс привел к таким извращениям?

bj
()
Ответ на: комментарий от intelfx

Заранее попрошу не злиться, если я где-то затупил...

Я создал фай с этим скриптом и назвал его kk.sh Далее я делал так:

$sudo ./kk.sh xx aa Switched to branch 'xx' fatal: ambiguous argument 'aa': unknown revision or path not in the working tree. Use '--' to separate paths from revisions fatal: ambiguous argument '..aa': unknown revision or path not in the working tree. Use '--' to separate paths from revisions

xx - это ветка на которую хочу скинуть комиты аа - это ветка с которой хочу скинуть комиты В итоге на ветку переключилось, комиты не перетянуло.

Kastamat
() автор топика
Ответ на: комментарий от Kastamat

Попробуй выполнить это:

git rev-parse <ветка>
и
git log --pretty=format:%H --date-order --merges -1 <ветка>

intelfx ★★★★★
()
Ответ на: комментарий от Kastamat

У меня всё работает.

Демонстрационный репозиторий: git://github.com/intelfx/test-repo.git

git clone git://github.com/intelfx/test-repo.git
cd test-repo
./test-script.sh master origin/x1

origin/x1 потому, что по умолчанию локальная ветка создаётся только для master.

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.