На данный момент мы изучили основы Git, в том числе:
- Как побороть боязнь разрешения Git-конфликтов? (последовательность)
- Как побороть боязнь разрешения Git-конфликтов? (Введение в Git Введение)
- Как побороть боязнь разрешения Git-конфликтов? (Основы Git — часть 1)
- Как побороть боязнь разрешения Git-конфликтов? (Основы Git — ниже)
- Как побороть боязнь разрешения Git-конфликтов? (Стратегия ветки Git)
- Как побороть боязнь разрешения Git-конфликтов? (Четыре компонента Git)
- Как побороть боязнь разрешения Git-конфликтов? (Гит расширенный)
Концепция охватывает 90% функций Git, и этого также достаточно для удовлетворения повседневных потребностей разработчиков.
Однако оставшиеся 10% могут оказаться особенно важными при работе со сложными рабочими процессами (или когда вы застряли).
Следующая тема для обсуждения — «организация коммитов»: разработчики иногда говорят: «我想要把这个提交放到这里,那个提交放到刚才那个提交的后面
", и следующее, о чем я собираюсь рассказать, это то, как это реализовано. Это выглядит сложно, но на самом деле это очень простая концепция.
git cherry-pick
Первая командаgit cherry-pick
, форма команды:
git cherry-pick <提交号>...
Если вы хотите скопировать некоторые коммиты в текущее местоположение (HEAD), наиболее простым способом является выбор вишни. Лично мне очень нравится выбор вишни, потому что это очень просто.
Давайте посмотрим на это на примере!
Вот репозиторий, мы хотим скопировать работу по боковой ветке в основную ветку, а вы сразу вспоминаете, чему научились раньшеrebase
правильно? Но давайте посмотрим, что может сделать выбор вишни.
git cherry-pick C2 C4
Вот и все! Нам нужно только закоммитить записи C2 и C4, чтобы Git подхватил их и поместил под текущую ветку, вот так просто!
интерактивная перебазировка
Cherry-pick отлично подходит, когда вы знаете, какие коммиты вам нужны (а также знаете хэши этих коммитов), нет более простого способа.
Но что, если вы не знаете хэш нужного коммита?
К счастью, Git понял это для вас, мы можем использовать интерактивную перебазировку, если вы хотите найти нужную запись из серии записей коммитов, это лучший способ
Давайте рассмотрим его подробно:
Интерактивная перебазировка относится к использованию с параметрами--interactive
Команда rebase, сокращенно-i
Если вы добавите эту опцию после команды, Git откроет интерфейс пользовательского интерфейса и перечислит альтернативные записи фиксации, которые будут скопированы в целевую ветку.Он также отобразит хэш-значение каждой записи фиксации и описание фиксации.Описание фиксации имеет Помогает понять, какие изменения внес этот коммит.
В реальных условиях так называемое окно пользовательского интерфейса обычно открывает файл в текстовом редакторе, таком как Vim.
Когда откроется интерфейс rebase UI, вы можете сделать 3 вещи:
- Настройте порядок записей коммитов
- удалить ненужные коммиты
- фиксация слияния
Затем посмотрите на конкретную команду:
можно увидеть:
- p, pick = use commit
- r, reword = use commit, but edit the commit message
- e, edit = use commit, but stop for amending
- s, squash = use commit, but meld into previous commit
- f, fixup = like "squash", but discard this commit's log message
- x, exec = run command (the rest of the line) using shell
- d, drop = remove commit
разделить редактирование записи фиксации
Измените выбор вложенной отправки на редактирование, указав, что эту отправку необходимо изменить; затем сбросьте до последней отправки, которую необходимо разделить, но сохраните содержимое рабочей области, а затем в свою очередь зафиксируйте содержимое рабочей области.
слияние фиксации записи сквош
Измените выбор подкоммита на squash, что означает слияние с родительским коммитом текущего коммита.
Пакетное изменение исторической информации об отправке
Измените выбор дополнительной отправки на переформулировку, что означает изменение исторической информации о подаче.
удалить историю
Измените выбор, чтобы удалить, или удалите линию напрямую.
Публичный аккаунт WeChat:На мечеПожалуйста, обратите внимание на мою личную технологию общедоступного аккаунта WeChat, подпишитесь на дополнительный контентЯ считаю, что у всех есть базовое представление о передаче и отправке записей Git, поэтому вы можете попробовать это в своей собственной среде git~