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