2013-07-22 3 views
3

В Git можно иметь, например, ветвь темы, которая содержит одно или несколько коммитов, устаревших при создании фиксации. Через некоторое время эти коммиты могут быть добавлены в другую ветку, как правило, путем слияния или переадресации.Git история фиксации "время добавлено в ветвь"

Обычно git log покажет список поручений, упорядоченных по дате & раз, когда была создана фиксация. Возможно ли просмотреть этот список на основе даты & раз фиксация была добавлена ​​в текущую ветку? В частности, я хочу написать сценарий, который вернет мне список коммитов, добавленных в ветвь на прошлой неделе, независимо от того, когда была создана фиксация.

Простой пример:

Пусть фиксации создается в филиале topic 22 июля. Через несколько дней, 25 июля, ветвь topic объединяется в master. Если я запускаю мой гипотетический list-commits сценарий, прося все фиксации, которые были добавлены или после 25-го июля я бы хочу вышеупомянутые совершить, чтобы показать, так как он был сливался 25 июля, хотя это было созданный 22 июля.

Еще одно замечание состоит в том, что в моем типичном рабочем потоке Git я использую только перемотки вперед, поэтому, когда я объединяю одну ветвь в другую, генерирование слияния не генерируется. Мне нужен способ получить эту информацию, не полагаясь на фиксацию слияния.

ответ

1

Вы всегда можете написать сценарий, который будет сливаться для вас, добавив дополнительную фиксацию, которая описывает, что было объединено. Такой подход дал бы вам немного свободы, поскольку вы могли бы модифицировать мастера до или после слияния, выбрав схему, которая даст вам наилучшие результаты.

Редактировать

git reflog может дать вам информацию, которую вы недостающее. С небольшим количеством работы,

+0

Это будет работать в теории, но создание дополнительных коммитов только для реализации сценария «commit digest» кажется ... грязным. – CmdrMoozy

+0

@CmdrMoozy: Хмммм ... Будет ли git reflog отвечать вашим потребностям? –

+0

Я думаю, что 'git reflog' действительно содержит правильную информацию, но это не в особенно удобном для использования формате. Во-первых, когда я 'git rebase' разделяет тему на новые коммиты на master, все коммиты в моей ветке темы перечислены в reflog, когда они воспроизводятся поверх новой базы. Конечно, это можно было бы проанализировать программно, но это может принести определенные усилия. Есть ли способ сделать отображение 'git reflog' только FIRST time HEAD, указывающее на уникальную фиксацию? Кроме того, для слияния он, похоже, не перечисляет коммиты по отдельности. Есть ли способ заставить его сделать это ala rebases? – CmdrMoozy

1

Вам нужно будет отменить любые слияния в ветке, чтобы определить, когда коммиты были добавлены в ветку. Кроме этого, сохраняется только время фиксации.

В принципе, найдите любые слияния и определите порядок событий через них.

+0

Я обычно выполняю простое переключение вперед, поэтому слияние не создается. Есть ли альтернатива в этом случае? – CmdrMoozy

+0

Хороший вопрос. Я бы отредактировал ваш оригинальный вопрос с этим разъяснением и посмотрел, есть ли у кого-нибудь еще ответ. – d1str0

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