2011-01-07 3 views
24

Я использую Git для моего проекта и пытается следовать передовой практики:Показать только история одного филиала в Git журнал

  1. Я работаю на тему филиала
  2. Когда все будет готово, я слить topic branch в мой dev ветвь с использованием git merge --squash. Это держит мой dev ветвь чистая.
  3. Всякий раз, когда DEV филиал является стабильной, и команда решает, что пришло время для освобождения, мы объединить Dev филиал в мастер ветви, без использованием сквош, и тег, который совершает в качестве выпуска версии.

Это должно сохранить нашу историю, и с помощью gitk, мы можем увидеть, где все фиксаций приходят. Однако, я хочу, чтобы иметь возможность видеть только коммиты, примененные к мастер отрасли. Я пробовал:

git log master 
git show-branch 

Ни один из них не показывают только историю мастер отрасли. Есть ли способ легко сделать это?

+0

Не можете ли вы «git checkout» перейти в «master» и сделать «git log»? – yasouser

ответ

21

Если я правильно понимаю вас, вы хотите увидеть, что слияния возвращаются в мастер, но не история этих слияний. Я считаю, что:

git log --merges 

предоставит вам то, что вы хотите.

UPDATE: Добавление - первый родитель должен исправить это из звуков.

git log --merges --first-parent 

--first родителем

Follow only the first parent commit upon seeing a merge commit. 

Этот вариант может дать лучший обзор при просмотре эволюцию конкретной темы отрасли, потому что сливается в тему отрасли, как правило, только о корректировке до обновленного времени от времени, и этот вариант позволяет игнорировать отдельных комиссий, внесенных в t o ваша история такого слияния.

+1

Почти, но, к сожалению, это также показывает, что происходит слияние в ветке * dev *. Я только хочу видеть слияния с * dev * на * master * –

+1

Первый родитель не обязательно, где была ветка раньше, она определяется во время слияния (ветвь, в которой произошло слияние). Если вы переходите к слиянию, первым родителем является другая ветка. – steabert

3

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

В связи с этим --first-parent не поможет в конечном счете, тем более, что легко иметь более одного мастера, например. Рассмотрим:

wc1$ git clone git://shared.com/repo 
wc1$ (hack code, git commit) 
wc2$ git clone git://shared.com/repo 
wc2$ (hack code, git commit, git push somewhere) 
wc1$ git fetch origin; git merge origin/master; git push somewhere master; 

(Не стесняйтесь брать случайный проект и выполнять это упражнение.) Граф.Таким образом, вы не можете наглядно нарисовать «только одну ветвь», даже если коммиты были помечены именем ветки, на которой они были сделаны (потому что оба являются мастерами).

+1

Предположим, что в таких ситуациях, когда несколько ветвей назывались «хозяином», вы хотели видеть их все. (На самом деле, когда я хотел что-то похожее на исходный вопрос здесь, это обычно то, что я хотел - было много историй, и я хотел увидеть их всех.) Итак, ответ на вопрос « отрасль, которую вы, возможно, захотите, «будет« всем », - нет необходимости разрешать ее только одному. –

8

К сожалению, Git не сохраняет информацию о ветке для фиксации, а фиксации не принадлежат ветке. Филиалы в Git - это просто «движущиеся метки» в ходе совершения транзакций, а НЕ последовательность коммитов, как и следовало ожидать.

Таким образом, вы не можете отображать коммиты, принадлежащие ветке, поскольку в Git нет такого понятия.

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