Перебазировать действия, приняв серию коммитов и повторно применив их, возможно, к другому «базовому» объекту.Это делается либо путем создания патча для каждого коммита и его повторного применения, либо путем их выбора по порядку.
Независимо от механизма, удаляет коммит изсписок инструкций по перебазированию, вы просили включить эти изменения , а не .
Представьте, что у вас есть какой-то файл, и в его первоначальной редакции он содержит одну строку с содержимым one
.Представьте, что в следующем коммите вы измените one
на two
.В последующем коммите two
до three
.Затем three
до four
и, наконец, four
до five
.Итак, теперь у вас есть пять коммитов, каждый меняет эту строку.
Представьте, что в каждом коммите вы давали ему сообщение, указывающее на изменение содержимого, и что магическим образом идентификатор фиксации (хэш) также отражал содержимое.Запуск rebase -i --root
даст вам такой сценарий:
pick 1111111 add one
pick 2222222 change one to two
pick 3333333 change two to three
pick 4444444 change three to four
pick 5555555 change four to five
Другими словами, первый коммит выбирает изменение с нуля до one
.Вторая команда выберет изменение с one
до two
и т. Д., Пока последняя инструкция не выберет изменение с four
до five
.
Если вы удалите некоторые из этих строк, дающие вам:
pick 1111111 add one
pick 5555555 change four to five
У вас будет два черрика.Первый добавит файл с содержимым one
.Второй попытается изменить это содержимое с four
на five
.
Увы, это содержимое не four
.Таким образом, у вас есть конфликт.
Если ваша цель - получить от one
до five
без промежуточных коммитов, то вы хотите squash
их или пометить как fixup
коммитов.
pick 1111111 add one
pick 2222222 change one to two
squash 3333333 change two to three
squash 4444444 change three to four
squash 5555555 change four to five
В этом случае первое изменение будет выбрано черри, поэтому будет создан файл one
.Последующее изменение будет выбрано черри, поэтому содержимое будет изменено с one
на two
.И последующие изменения будут отобраны, что приведет к дальнейшему обновлению файла, но эти изменения будут "сведены" в предыдущую фиксацию.Таким образом, вы получите полное содержимое, но в итоге получите только два коммита.
(Если бы вы пометили их как fixup
коммитов, вы бы получили то же содержимое, но их сообщения коммита небыть включенным в предложенное вами сообщение о коммите.