git merge теряет ссылку на ветку - PullRequest
0 голосов
/ 06 октября 2011

Обзор:

$ git pull
... time passes ...
$ git checkout topic # remote topic
$ git checkout master
$ git merge topic
$ git push
    non-fast-forward updates were rejected
$ git pull
    merge by rebase
$ git push

В результате изменения файла отправляются, но ссылка на ветку темы теряется. (На github это приводит к тому, что запрос на включение не закрывается.) Кроме того, граф выглядит странно, поскольку ветвь темы не показана для объединения в master.

Триггер для того, чтобы это произошло, - это подтягивание после слияния, которое требует слияния. То есть мастер был изменен при объединении темы.

Настройка для pull - всегда использовать pull --rebase.

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

Нам удалось исправить график, заново объединив ветку темы.

Как мы можем избежать этого в будущем? Что вызывает эту проблему? Не похоже, что мы что-то сделали неправильно.

Спасибо!

п.с. Конфигурация настроена так, чтобы только тянуть / толкать текущую ветвь.

1 Ответ

4 голосов
/ 06 октября 2011

«Исправить» - не использовать pull --rebase - ребазинг - это то, что теряет вашу историю.Весь смысл слияния, а не перебазирования, состоит в том, чтобы хранить историю отдельных ветвей.

git pull обычно эквивалентен git fetch + git merge.

git pull --rebase is git fetch + git rebase.

Первый сохраняет исторические ссылки;последний создает совершенно новые коммиты.(Есть ли какая-то особая причина, по которой у вас git pull установлено постоянное перебазирование?)

Вы также можете выполнить git pull на master перед тем, как объединить topic, чтобы убедиться, что masterобновлен (чтобы объединение не приводило к истории без перемотки вперед).

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