Git: Сброс коммита слияния - PullRequest
       0

Git: Сброс коммита слияния

0 голосов
/ 19 ноября 2018

Допустим, в руке есть две ветви:

master:

0--1--2

dev:

0--1--2

Итак, мы объединяем dev и master и заканчиваемс коммитом слияния 4 с двумя родительскими коммитами 2 и 3:

0--1----2---4
    \--3---/

Теперь, если мы избавимся от коммита слияния через git reset --soft head~1, мы получимследующий журнал:

0--1--2

Вопрос : почему git решает удалить commit 3, а не commit 2?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Что-то подозрительное в вашем примере; Я не могу воспроизвести это. Но для git фона, которого должно хватить, чтобы увидеть, что происходит у вас. От Git Book :

Вы также можете указать число после ^ - например, d921970^2 означает «второй родительский элемент d921970». Этот синтаксис полезен только для коммитов слияния, которые имеют более одного родителя. Первый родитель - это ветвь, в которой вы находились, когда вы сливались, а второй - коммит в ветке, которую вы объединили в

и

Другая основная спецификация предков - ~ (тильда). Это также относится к первому родителю, поэтому HEAD~ и HEAD^ эквивалентны. Разница становится очевидной, когда вы указываете номер. HEAD~2 означает «первый родитель первого родителя» или «прародитель» - он пересекает первых родителей указанное вами количество раз.

Таким образом:

В этом случае у головы два родителя. Итак, на какой из них HEAD ~ 1 указывает?

Это относится к первому родителю HEAD - то есть к ветке, в которой вы были, когда объединялись. Невозможно получить доступ ко второму родителю (объединенной ветви) только с помощью синтаксиса тильды.

0 голосов
/ 19 ноября 2018

Когда вы спрашиваете git о git reset --soft HEAD~1, , вы (никто другой) просите, чтобы git поместил указатель ветки на данную ревизию (HEAD ~ 1), которая в этом случае заканчивается ревизией 3. Возможно, вы слили ревизию 2, стоящую поверх ревизии 3, поэтому в ревизии первым родителем будет 3, и поэтому HEAD ~ 1 будет указывать на ревизию 3.

Если вы попросите git ввести git reset --soft 2 (укажите идентификатор редакции для редакции 2), вы получите 0 - 1 - 2. Решает не мерзавец, а ты, выполнив эту команду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...