В этой статье я расскажу о том, как работает Git rebase, о различиях между Git rebase и Git merge и о том, как работать с Git rebase. Итак, приступим.
Git Rebase:
Допустим, у вас есть репозиторий Git с коммитами А, B, C в владелец ветка. Затем вы создали новую ветку какая-то ветвь и добавил 2 новых коммита D а также E к какая-то ветвь ветка.
Рис 1: начальная история фиксации.
Допустим, вы забыли добавить что-то в владелец ветка. Итак, вы вернетесь к владелец ветвь и добавить новую фиксацию грамм к владелец ветка. Ваша история git должна выглядеть следующим образом.
Рис 2: история коммитов после добавления коммита G в главную ветку.
Все выглядит хорошо. Теперь, если вы хотите, чтобы все изменения, которые вы внесли в какая-то ветвь филиал, чтобы быть в владелец ветку, вы можете объединить какая-то ветвь ветвь к владелец ветка. Это то, что мерзавец слияние делать.
Что делать, если вы хотите зафиксировать грамм быть доступным в какая-то ветвь ветка? Что ж, вы можете использовать для этого git rebase.
Из истории коммитов на рис. 2 видно, что ветка какая-то ветвь начинается с коммита C. Если вы выполните git rebase на какая-то ветвь, тогда он начнется с фиксации грамм как показано на рис. 3 ниже. Обратите внимание, что содержимое коммита D а также E также изменится после операции перебазирования. Коммиты D а также E будет включать изменения в фиксацию грамм. Вот почему я добавил * символ перед коммитами D а также E.
Если вы хотите знать, как будет выглядеть история коммитов, если я ее объединю, взгляните на рис 4. Я включил его, чтобы вы могли сравнить его с git rebase.
Рис 4: история коммитов, если использовалось слияние git.
Теперь, когда вы знаете, что такое git rebase, разницу между git rebase и git merge и почему он используется git rebase, я покажу вам, как его использовать, в следующем разделе этой статьи ниже.
Рабочий процесс Git Rebase:
В этом разделе я создам новый репозиторий git на моем локальном компьютере и покажу вам, как работает git rebase. Я рекомендую вам хорошо разбираться в git rebase, прежде чем применять его в своем проекте.
Сначала создайте новый репозиторий Git rebase-demo / на вашем компьютере следующим образом:
$ git init rebase-demo
Теперь перейдите к rebase-demo / каталог следующим образом:
$ cd rebase-demo /
Теперь создайте новый файл контрольная работа.текст следующим образом:
$ echo "A"> тест.текст
Тест.txt файл содержит только одну строку А. Допустим, это ваш исходный код проекта.
Теперь зафиксируйте изменения следующим образом:
$ git add .$ git commit -m 'A'
Теперь добавьте еще одну строку B к контрольная работа.текст файл, как показано на скриншоте ниже.
Теперь зафиксируйте изменения следующим образом:
$ git add .$ git commit -m 'B'
Теперь давайте добавим еще одну строку C к контрольная работа.текст файл.
Кроме того, зафиксируйте изменения следующим образом:
$ git add .$ git commit -m 'C'
Теперь история коммитов основной ветки должна выглядеть следующим образом:
$ git log --oneline
Теперь, допустим, у вас есть несколько новых идей, которые вы хотите опробовать. Итак, давайте создадим и перейдем в новую ветку новая особенность следующим образом:
$ git checkout -b новая функция
Теперь добавьте свою новую идею (строка D скажем) к контрольная работа.текст файл.
Теперь зафиксируйте изменения следующим образом:
$ git add .$ git commit -m 'D'
Теперь добавьте линию E к контрольная работа.текст файл.
Зафиксируйте изменения следующим образом:
$ git add .$ git commit -m 'E'
Теперь история фиксации новая особенность ветка должна выглядеть следующим образом:
$ git log --onelineПосмотрите, как коммиты в порядке A < B < C < D < E?
Теперь вы помните, что забыли добавить что-то в владелец ветке, в которой вы также хотели быть новая особенность ветка! Итак, оформляем заказ в владелец ветка.
Я добавил новую строку в конце контрольная работа.текст файл, как вы можете видеть.
Теперь зафиксируйте изменения следующим образом:
$ git add .$ git commit -m 'G'
Теперь история фиксации владелец ветка должна выглядеть так.
А < B < C < G
Теперь, чтобы перебазировать коммиты из владелец ветвь к новая особенность филиал, первая касса в новая особенность ветка.
Новая функция $ git checkout
Теперь выполните git rebase для владелец ветвь следующим образом:
$ git rebase master
Некоторый конфликт слияния! Давай исправим это.
Что ж, изменения, которые я внес в коммит грамм а также D противоречат друг другу. Я хочу сохранить оба эти.
После исправления конфликта слияния контрольная работа.текст файл должен выглядеть следующим образом:
Теперь добавьте изменения в промежуточную область следующим образом:
$ git add .
Теперь продолжите перебазирование следующим образом:
$ git rebase - продолжить
Другой конфликт слияния! Ну это может случиться. Rebase изменяет историю коммитов git. Итак, такие вещи ожидаются.
Кажется, что процесс слияния не удался из-за пустых строк. Давай исправим это.
После исправления конфликта слияния контрольная работа.текст файл должен выглядеть следующим образом.
Теперь добавьте изменения в промежуточную область следующим образом:
$ git add .
Теперь продолжите операцию перебазирования следующим образом:
$ git rebase - продолжить
Git rebase завершена.
Как видите, история коммитов ветки новой функции обновлена. Теперь история коммитов выглядит следующим образом:
А < B < C < G < D < EКак и ожидалось.
Финал контрольная работа.текст файл должен выглядеть следующим образом.
Git rebase - мощный инструмент. Но вы никогда не должны использовать его в общих репозиториях Git. Используйте его только в репозиториях Git, с которыми работаете только вы. В противном случае вы столкнетесь с множеством проблем по пути.
Итак, как вы используете git rebase. Спасибо, что прочитали эту статью.