Почему форк-пойнт обновляется? - PullRequest
0 голосов
/ 30 июня 2018

Я сделал несколько коммитов на ветке MyCurrent. Тогда поймите, что я делаю их по другому и оставляю текущую ветку нетронутой.

Таким образом, я создаю новую ветку в корневой точке (где я должен начать новую ветку):

git checkout -b fixes 6735ff2

И проверьте корень ветки:

$ git merge-base --fork-point fixes
6735ff23c52338fbaafbfa1707f0bcbb1e5b9698

Затем я объединяю (может быть, мне следует выбрать вишню?) Текущую ветку

$ git merge --ff-only MyCurrent
Updating 6735ff2..e1700a5
Fast-forward
...

Когда я проверяю form-point снова - он перемещается:

git merge-base --fork-point fixes
e1700a59dd

Почему точка ветвления обновляется?

1 Ответ

0 голосов
/ 30 июня 2018

git merge-base --fork-point использует reflog:

Для этого ответа я посмотрел исходный код . Это показывает, что Git просматривает reflog первого неопционального аргумента - вызовите это arg1 - и затем использует его, чтобы найти базу слияния, используя следующий такой аргумент arg2, преобразованный в идентификатор фиксации, полностью игнорируя любые дополнительные аргументы. Исходя из этого, результат git merge-base --fork-point $arg1 $arg2 по существу 5 вывод:

git merge-base $arg2 $(git log -g --format=%H $arg1)

Поскольку git merge --ff-only MyCurrent обновил reflog, добавив новый хеш коммита, неудивительно, что значение --fork-point изменится. (Обратите внимание, что arg2 здесь по умолчанию равно HEAD, поскольку вы его не указали.)

(Примечание: сноска объясняет, где эти результаты отличаются, а также пример. Это не совсем то же самое.)

Смотрите мой (довольно длинный) ответ на git pull --rebase потерянных коммитов после git push сотрудника --force (прокрутите вниз до раздела, помеченного как «Параметр --fork-point»), чтобы узнать больше.

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