Объединить несколько коммитов с помощью git rebase
1. Предпосылки
Репо обычно поддерживается совместной командой из более чем одного человека, если вам нужно добавить новую функцию, это функция ветки. В связи с разработкой различных модификаций эта ветка функций неоднократно коммитится. После финального мастера отправки вы увидите всю историю инкрементных изменений. На самом деле, для других наше изменение должно быть добавлено или удалено, для других, чтобы увидеть постепенный процесс разработки, но слишком беспорядочный. Таким образом, мы можем быть отправлены после ветки функции слияния, а затем слияние в ствол выглядит намного чище.
Я помню, что на Zhihu был пост с вопросом, почему автор vue, You Da, при разработке vue история отправки может быть такой освежающей.Почему история коммитов Git так свежа? - Quora
2. Введение в перебазирование
Роль rebase кратко резюмируется следующим образом: вы можете редактировать, удалять, копировать и вставлять определенную линейную историю коммитов, поэтому разумное использование команды rebase может сделать нашу историю коммитов чистой и лаконичной!
Но следует отметить, что:
Не перебазируйте любые коммиты, которые были зафиксированы в общедоступном репозитории (за исключением веток, в которые вы играете в одиночку)
3. Отрицательный пример
Создать новый репозиторийrebase-test; создать новую ветку разработкиdev; в ветке разработки этоcommitтри раза, а затемmergeприбытьmasterветвь; затемgit logилиgit log --oneline;Можно найтиdevкаждый раз на веткеcommitвсе проявленоmasterначальство
fb28c8d (HEAD -> master, origin/master, origin/dev, origin/HEAD, dev) fix: 第三次提交
47971f6 fix: 第二次提交
d2cf1f9 fix: 第一次提交
26bac61 Initial commit
скопировать код
Если вы используете
git logможно нажатьsперевернуть внизlog
git log --onelineможет отображаться в одну строку
4. Специальные операции
Когда мы отправили несколько раз в локальный репозиторий, перед тем, как отправить локальную отправку в общедоступный репозиторий, чтобы сделать записи отправки более краткими и ясными, мы надеемся объединить следующие три записи отправки ветвей B, C и D в полную отправку, а затем отправить в общедоступный репозиторий.
Здесь мы используем команду:
git rebase -i [startpoint] [endpoint]
в-iозначает--interactive, то есть появляется интерактивный интерфейс для редактирования и завершения операции слияния.[startpoint] [endpoint]Указывается интервал редактирования, если не указан[endpoint], то конечной точкой интервала является фиксация, на которую по умолчанию указывает HEAD текущей ветки (Примечание: этот интервал указывает интервал, который открывается раньше и закрывается позже). После просмотра лога запускаем следующую команду:
git rebase -i 36224db
скопировать код
или
git rebase -i HEAD~3
скопировать код
Затем мы увидим следующий интерфейс:
В части без комментариев выше перечислены все коммиты, включенные в нашу операцию перебазирования, а часть с комментариями ниже представляет собой описание команды, предоставленное нам git. Выбор перед каждым идентификатором фиксации указывает тип инструкции, и git предоставляет нам следующие команды:
pick: сохранить фиксацию (аббревиатура: p)
reword: сохранить коммит, но мне нужно изменить комментарий коммита (аббревиатура: r)
edit: сохранить коммит, но я хочу остановить и отредактировать коммит (не только комментарии) (аббревиатура: e)
squash: объединить этот коммит с предыдущим коммитом (аббревиатура: s)
fixup: объединить эту фиксацию с предыдущей фиксацией, но я не хочу сохранять информацию о комментариях этой фиксации (аббревиатура: f)
exec: выполнить команду оболочки (аббревиатура: x)
drop: я хочу отказаться от коммита (аббревиатура: d)
В соответствии с нашими потребностями мы отредактируем содержимое коммита следующим образом:
выбрать исправление d2cf1f9: первый коммит
s 47971f6 исправление: вторая фиксация
s fb28c8d fix: третья фиксация
Вышеприведенное означает, что второй и третий коммиты объединяются в первый коммит.
потомwqПосле сохранения и выхода открывается интерфейс модификации аннотаций:
Вы можете снова просмотреть состояние и нажать два дд, чтобы удалить строку
Окончательные эффекты редактирования следующие:
Вы можете выполнить слияние Commit:
последний просмотрlogОтправить слияние сейчас