Показывать только историю одной ветки в журнале Git - PullRequest
25 голосов
/ 07 января 2011

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

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

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

git log master
git show-branch

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

Ответы [ 3 ]

23 голосов
/ 07 января 2011

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

git log --merges

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

ОБНОВЛЕНИЕ: Добавление --first-parent должно исправить это из звуков этого.1008 *

- первый родитель

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

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

8 голосов
/ 07 января 2014

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

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

3 голосов
/ 08 января 2011

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

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;

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

...