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

Как узнать количество нуклеированных родителей слияния?

Мне нужно сделать git revert -m, но я не смог найти какую-либо документацию о том, как пропущены родители фиксации. Все, что я видел (включая страницы справки для rev-parse), просто говорит мне, что родители нумеруются, но не говорят, как их пронумеровать. Может ли кто-нибудь указать мне, где это определено и как это определить?

4b9b3361

Ответ 1

git show --format="%P" <SHA>

предоставит вам родительские SHA данного коммита в числовом порядке. Чаще всего тот, который вы хотите указать для git revert, будет 1.

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

Если вы хотите найти SHA для определенного родителя, используйте оператор каретки:

  • Первый родитель: git rev-parse <SHA>^1
  • Второй родитель: git rev-parse <SHA>^2

et cetera.

Ответ 2

Выполнение git log или git show on the merge commit покажет вам список родителей для слияния в заголовке "Merge:". Здесь перечислены родители слияния в последовательном порядке слева направо. Первый - это первый родительский, второй - второй родительский и т.д.

Например, в репозитории git:

$ git show 0af53e188a3a8915f65c3b3edaeed3e07d8d3802
commit 0af53e188a3a8915f65c3b3edaeed3e07d8d3802
Merge: b81b758 8894d53
Author: Junio C Hamano <[email protected]>
Date:   Thu Aug 11 11:04:28 2011 -0700

    Merge branch 'cb/partial-commit-relative-pathspec'

    * cb/partial-commit-relative-pathspec:
      commit: allow partial commits with relative paths

b81b758 является первым родителем, а 8894d53 является вторым родителем для фиксации слияния 0af53e1.

Родительские коммиты нумеруются в соответствии с порядком их появления в командной строке при выполнении фиксации:

[on branch master]
$ git merge foo bar baz

Это объединит ветки foo, bar и baz в master и создаст новое слияние, если ускоренная перемотка вперед невозможна.

В результате слияния "хозяин" будет первым родителем, "foo" 2nd, "bar" 3rd и "baz" 4th.

Ответ 3

"commit" - это действительно значение SHA1. Это дает ему большую целостность для целей проверки.

У этого также есть хороший побочный эффект, который вы/не можете ожидать, что он будет каким-либо образом последовательным, что также является естественным свойством ветвей и объединяет многопользовательские распределенные системы VCS. Существует множество команд древовидной ходьбы и методов ссылок, таких как HEAD ^ или HEAD ^^.

git help revisons дает полное описание всех различных синтаксисов.