Найти все коммиты в определенной ветке в GIT

#git-branch #git-merge #git-commit #fast-forward #automerge

#git-branch #git-слияние #git-фиксация #быстрая перемотка вперед #автоматическое объединение

Вопрос:

Возможно, это повторяющийся вопрос, но я не нашел точных ответов.

Допустим, у меня есть 2 ветки br1 и br2 с 3 коммит в каждой.

br1

  • зафиксировать
  • зафиксировать b
  • зафиксировать c

br2

  • зафиксировать d
  • зафиксируйте e
  • зафиксировать f

Когда я выполняю слияние с br2 на br1, журнал git в br1 показывает коммиты a, b, c, d, e, f.

Допустим, у меня есть 2 ветки br1 и br2 с 3 коммит в каждой.

br1 после слияния с br2

  • зафиксировать
  • зафиксировать b
  • зафиксировать c
  • зафиксировать d
  • зафиксируйте e
  • зафиксировать f

Есть ли способ отфильтровать коммиты, которые были созданы только на br1? (Я пробовал git log br1 ..br2, но есть ли какой-либо другой метод?)

Если слияние было ускоренным или автоматическим, запишет ли GIT какой-либо коммит для слияния? (я вижу фиксацию, когда есть конфликт, но не при автоматическом объединении)

Ответ №1:

Ветка — это просто указатель на конкретный коммит. Таким образом, вы не можете узнать, из какой ветки пришел определенный коммит.

При ускоренной перемотке единственное, что меняется, это то, что коммит, на который указывает определенная ветка, переключается, поэтому дополнительная фиксация записываться не будет. Если вы хотите, чтобы был записан дополнительный коммит, используйте git merge --no-ff .

Ответ №2:

Я не уверен, почему это важно знать, но если это так, то вы могли бы создать новую ветку из br1 и использовать эту ветку для объединения br2. Тогда br1 и br2 остаются неизменными, и вы можете определить, какой из них включает какие изменения, в то время как у вас также есть ветка слияния, содержащая оба набора изменений.

br1

  • a
  • b
  • c

br2

  • d
  • e
  • f

mbr1_2

  • a
  • b
  • c
  • d
  • e
  • f

Ответ №3:

Проблема с git log br1..br2 заключается в том, что он попытается подавить коммиты, которые являются частью br1, но все коммиты теперь являются частью br1, поэтому ничего не будет отображаться.

Что вы можете сделать, так это найти коммит непосредственно перед слиянием br2; git log br1^..br2 , но это сработает только в том случае, если br1 не продвинулся вперед.

В общем, лучший способ — найти соответствующее слияние и показать коммиты, которые были объединены:

 git log merge^1..merge^2