ГИТ перебазирования после предыдущего слияния в Git
у меня следующая ситуация:
- я создал
clone
(Y) из основного репозитория (X), потому что было много людей, работающих над Y, мы не делали никакихrebase
, но толькоmerge
s. Когда мы хотим поставить(push
) от Y до X мы хотели бы сделатьrebase
чтобы все было красиво и чисто
проблема в том, что когда делаю rebase
нас просят сделать все слияния, которые мы уже делали в предыдущем merge
действия. Есть ли решение это, кроме того, что означает фактически повторное выполнение слияний?
Я ожидал, что это будет довольно просто, так как мы уже решили противоречивые сливает.
4 ответа:
перебазирование для получения "чистой" истории переоценено. Лучший способ, если вы хотите сохранить историю, - это просто выполнить слияние вместо перебазирования. Таким образом, если вам когда-нибудь понадобится вернуться к ревизии, это ровно то же самое, что вы тестировали во время разработки. Это также решает вашу проблему о ранее решенных конфликтах слияния.
Если вы не заботитесь о сохранении истории, вы можете создать новую ветвь мастера, проверить ее, а затем сделать
git read-tree -u -m dev
to обновите свое рабочее дерево в соответствии сdev
филиала. Затем вы можете зафиксировать все в одну большую фиксацию и объединить ее в master как обычно.
git merge --squash
теперь мой предпочтительный способ перебазирования после большого объема работы и многих слияний (посмотреть этот ответ). Если ветка, над которой вы работаете, называетсяmy-branch
и вы хотите перебазировать изmaster
тогда просто сделайте следующее:git checkout my-branch git branch -m my-branch-old git checkout master git checkout -b my-branch git merge --squash my-branch-old git commit
два замечания:
- вы можете перебазировать свою собственную (еще не нажатую) работу столько раз, сколько хотите, поверх вновь полученных коммитов.
- вы могли бы избежать конфликтов слияния (во время перебазирования), если бы у вас было активирован
git rerere
, что делается для такого рода ситуации.
Смотрите больше наgit rerere
.