У меня есть репозиторий git, над которым работают несколько человек.Я настроил branch.master.rebase = true
и branch.master.mergeoptions = --no-ff
, но столкнулся с проблемой:
Кто-то пытался объединить ветвь функций в master.Слияние прошло успешно, и git сказал, что ветка была на 30 коммитов раньше, чем origin / master.Когда он попытался отправить изменения, git отклонил push, потому что там были изменения в пульте, поэтому ему пришлось сделать git pull.Когда он сделал тягу, git сделал ребаз для коммитов, которые были объединены с мастером, и теперь было всего 29 коммитов перед мастером.
Я считаю, что коммит слияния был потерян, потому что после ребазированиякоммиты, которые были применены как новые коммиты, а не коммиты, полученные из ветви функций.
После нажатия дерево было таким:
* c3'(head, master, origin/master)
* c2'
* c1'
| * c3 (feature_branch, origin/feature_branch)
| * c2
| * c1
| /
*
Это то, чего я пытался достичь:
* c4 (head, master, feature_branch, origin/master)
| \
| * c3 (origin/feature_branch)
| * c2
| * c1
| /
*
Слияние выглядело как быстрое слияние, чего я пытаюсь избежать, чтобы сохранить историю ветвления.
Какие-нибудь советы о том, что я могу сделать, чтобы избежать этого?
Спасибо,
Редактировать: Эта статья описывает мою проблему: http://notes.envato.com/developers/rebasing-merge-commits-in-git/
Теперь я знаю о опции --preserve-merges для git rebase
, ноЕсть ли способ сделать эту опцию по умолчанию?
В противном случае разработчики должны будут git fetch
и git rebase origin/master
вместо просто git pull
.