2017-02-18 2 views
0

Итак, я понял, что могу получить последнее слияние, чтобы справиться с использованием git log master --merges -1. Я хотел бы сделать это еще дальше и получить только последние коммиты от последнего слияния для освоения. Как это сделать?Как получить только фиксации последнего слияния с веткой в ​​git

Например, допустим, что у меня есть master, staging, feature1 и feature2 Отрасль. Я сливаю feature1 в staging, а затем в master. Затем я делаю то же самое с feature2. Как я могу получить это между слиянием feature2?

+0

Вы попросили «ребенка совершить», но тогда ваш пример и принятый ответ, похоже, ищут * родительские * коммиты, что значительно проще (и для чего правильный ответ xarthnax). Концепции становятся намного яснее, если вы рисуете график коммитов. Синтаксис 'A..B' означает« получить все мои коммиты, которые я могу найти, начиная с «B» и возвращаясь к его истории, а затем из этого списка * отбросьте * любую фиксацию, которую я могу найти, начиная с 'A «и, и обратно, через свою историю». – torek

+0

@torek Я считаю, что вы правы на этом, извините за ошибку. Позвольте мне изменить свой вопрос для людей, которые ищут это в будущем. –

ответ

0

После git log master --merges -1 просмотрите две родительские коммиты этого слияния. Затем выведите git log <parent1>..<parent2> --right-only --no-merges --format=format:%H, чтобы перечислить коммиты с ветки feature2.

+0

Спасибо за это, это очень просто, и я думаю, что ответ на вопрос, не слишком тяжелый в командной строке. –

+0

'-right-only' только действительно имеет смысл для симметричной разницы,' commit1 ... commit2' (три точки). При использовании только двух точек вы должны получать те же результаты с или без '-right-only'. – torek

0

Вы пробовали флаг --children?

git log master --children --merges -1 

или вы могли бы попробовать

https://gist.github.com/kohsuke/7590246

+0

Я дал ему шанс, но эта команда, похоже, дает последнее слияние с мастером и не включает детей. –

+0

Вы можете попробовать [подход kohsuke git-children-of] (https://gist.github.com/kohsuke/7590246). Вам просто нужно передать результат вашей первой команды. –

0

git log -1 --merges --pretty=format:"%H" дает ША из последнего слияния коммита.

Вы можете использовать этот SHA для фильтрации вывода git rev-list --all --children и ограничить результаты фиксации, чьими родителями являются данные SHA1.

COMMIT=`git log -1 --merges --pretty=format:"%H"` 
git rev-list --all --children | grep "^${COMMIT}" | cut -f2 -d' ' 

Согласно git-rev-list documentation,

--Детское печати также дети совершают (в виде "фиксации ребенка ...").

Таким образом, grep "^${COMMIT}" обеспечит вывод строк, начинающихся с последнего слияния.

 Смежные вопросы

  • Нет связанных вопросов^_^