Подтвердить что ты не робот

Показывать только историю одной ветки в журнале Git

Я использую Git для своего проекта и стараюсь следовать наилучшей практике:

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

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

git log master
git show-branch

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

4b9b3361

Ответ 1

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

git log --merges

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

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

git log --merges --first-parent

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

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

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

Ответ 2

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

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

Ответ 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;

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