Не может перебазировать мерзавец, слияние и геррит

Я сделал что-то действительно странное. И не знаю, что делать, знать.

Я работаю с Герритом, и он только что показал мне, что он не может слиться из-за конфликта, но был какой-то конфликт, но вместо этого я думаю, что это было из-за HEAD

И я начал делать действительно случайные вещи, во-первых, я cherry-picked 3 коммитов в один, и после этого я снова отсоединил основную ветку, которую я попытался перебазировать, но получил конфликт слияния, так что, наконец, я получил следующий журнал

https://imgur.com/a/FnJqI

Это потому, что я не понимаю разницу между merge а также rebase

Не могли бы вы помочь мне исправить историю (в одну прямую) и ответить на вопрос:

В чем разница между merge а также rebase если по умолчанию используется git fast-forward поэтому результат выглядит точно так же, как и в rebase. И в моем случае я не мог сделать ребаз из-за конфликтов слияния. Так какова цель rebase чем?

1 ответ

Решение

Rebase отличается от слияния, потому что Git использует fast-forward только если может. Например: вы создаете новую ветку из master, вы обязуетесь к вашей новой ветви, вы не обязываетесь к master, а затем вы хотите merge ваши изменения обратно в master: git будет думать, что это так же, как если бы вы только что взяли на себя обязательство master тем не мение. И он будет думать то же самое, если вы используете rebase в этой ситуации.

Настоящее веселье начинается, когда у вас есть изменения в обеих ветках, а git не может использовать ускоренную перемотку вперед: тогда merge создаст новый коммит, для которого родители будут вашими последними коммитами в обеих ваших ветках, и rebase попытается переместить базу вашей ветви, которую вы пытаетесь перебазировать, в головку другой ветви.

Таким образом, чтобы "исправить" вашу историю (в одну прямую линию), вам нужно отменить слияние (помеченное как голова), и вам нужно перебазировать ваш Rebasing перейти к вашему master ветка

git checkout Rebasing
git rebase master

У вас все еще будут конфликты, которые вам нужно разрешить и продолжить с

git rebase --continue

столько раз, сколько необходимо.

Другие вопросы по тегам