предисловие
В предыдущей статье упоминалосьспецификация сообщения фиксации, контроль версий git играет чрезвычайно важную роль в ежедневной совместной работе команды.Помимо стандартизации управления информацией о git-коммитах, вы также можете вносить некоторые исправления в git-коммиты, то есть git rebase.
что такое git rebase
Есть два способа изменения между разными ветками в git:merge
а такжеrebase
, слияние чаще используется для слияния ветвей. Точно так же для слияния ветвей можно использовать и перебазирование. Хотя он используется реже, его функция намного мощнее, чем простое слияние.
Перебазировать означает перебазировать. Как следует из названия, это изменение точки отсчета. С фиксацией в качестве контрольной точки вы можете изменять историю коммитов по своему желанию, а с ветвью в качестве контрольной точки вы можете объединять ветки и организовывать фиксации в в то же время.
как использовать
Как упоминалось выше, перебазирование может быть основано на коммите или ветке, Взяв за пример автора, основное использование перебазирования выглядит следующим образом:
- Изменить историю коммитов в сочетании с предыдущей статьейспецификация сообщения фиксации, можно сделать так, чтобы каждый коммит делал только одну вещь, один принцип.
- Объединяйте ветки, чтобы сохранить ветки в одной цепочке и избежать частого переключения точек ветвления, что приводит к путанице при коммитах ветвей. (необходимое лекарство от обсессивно-компульсивного расстройства)
зафиксировать модификацию
Для фиксации изменений вы можете использоватьgit commit -amend
Измените информацию о коммите. Если вы хотите изменить несколько коммитов, вы должны использоватьgit rebase
.
Простой процесс выглядит следующим образом:
использоватьgit log --oneline
Получить хеш-значение соответствующего коммита (данный коммит является точкой отсчета и в данной модификации не участвует);
использоватьgit rebase -i 5663aa4(指定的基准点)
Войдите в режим vi, чтобы вручную редактировать коммиты в выбранном диапазоне, которые можно объединять, редактировать и удалять.Подробности см. в комментариях в интерфейсе vi.
комбинироватьспецификация сообщения фиксацииИдеальный коммит по принципу одной задачи может быть достигнут.После того, как задача официально завершена, бессмысленные коммиты могут быть объединены вместе с помощью перебазирования.
слияние ветвей
Существует два способа объединения веток:merge
а такжеrebase
, вы можете обратиться к конкретной разнице между двумя методамиPro Git Bookобъяснение.
Проще говоря:
Для вилки git в той же ситуации:
Мергеры слияния показаны ниже:
Слияние Rebase показано ниже:
Разница между ними в том, что слияние просто объединяет все изменения в один коммит, сохраняет запись коммита, а также генерирует отвратительные ненужные коммиты слияния, в то время как rebase берет самого последнего общего предка в качестве точки отсчета для выполнения изменений в последовательности. При сортировке изменения текущей ветки всегда помещаются последними, и фиксация слияния не создается.
обоюдоострый меч
Рабочий процесс gitflow обычно рекомендуется при ежедневной совместной разработке команды, а использование перебазирования для слияния веток запрещено.Основная причина в том, что перебазирование изменит поток коммитов всей ветки, который чрезвычайно подвержен версии конфликтов.Поэтому по использованию rebase у автора есть несколько небольших предложений:
- Использование rebase для изменения коммитов происходит только в локальных ветках
- Локальные ветки должны быть отправлены в репозиторий сервера перед
git rebase origin (branch)
Обязательно скачайте последний код. - Запрещено использовать
git push --force
Перезаписать историю коммитов на сервере.
В общем, rebase — очень мощный инструмент, и если он сделан правильно, он определенно убивает.
Суммировать
Подводя итог, автор резюмирует набор для объединенияспецификация сообщения фиксацииа такжеgit rebase
Рабочий процесс выглядит следующим образом:
Предположим, команда разрабатывает проект, кромеmaster
за пределами филиалаdevelop
филиал, то в локальной разработке следует опираться наdevelop
Ветка Создайте пользовательскую ветку:
git checkout developgit branch -b minfive
Затем выполните произвольную разработку в пользовательской ветке.После завершения разработки функциональной точки используйте rebase для организации и объединения всех новых коммитов в одинспецификация сообщения фиксацииКоммит, после завершения полной функциональной точки, организует и объединяет коммит, а после завершения разработки объединяет пользовательскую ветку, которая была отсортирована, в коммит посредством перебазирования.develop
ветвь.
На данный момент локальная разработка завершена, и код необходимо отправить на сервер, затем используйтеgit pull --rebase
Вытащите последнюю фиксацию с сервера и перебазируйте вdevelop
ветвь. Если есть конфликт, чтобы разрешить конфликт, если конфликта нет, вы можете напрямую отправить код на сервер.
Примечание: пользовательская ветка должна быть максимально синхронизирована с веткой разработки.В общем, каждый раз, когда ветка разработки обновляется, автор перестраивает пользовательскую ветку на основе ветки разработки, чтобы обеспечить точность эталонного теста перебазирования. .
Затем остальная часть процесса в основном такая же, как рабочий процесс gitflow.
После такого процесса поток фиксации выглядит следующим образом:
без появления избыточных коммитов слияния:
Артефакт спасения от обсессивно-компульсивного расстройства! ! !
Также: прилагаетсяdemoодин.