я пытаюсь использовать git rebase -i, но я получаю ошибку noop - PullRequest
0 голосов
/ 01 октября 2019

я успешно слил свою тестовую ветку с моим мастером, однако

, когда я пытаюсь использовать git rebase -ii, получаю сообщение об ошибке

, и я не могу переупорядочить любой из моих коммитов

this is the kind result i expect

but instead i get this error

это результат моего журнала git пожалуйста, игнорируйте последнюю строку кода

enter image description here

1 Ответ

0 голосов
/ 01 октября 2019

Это не ошибка , не совсем так. Он просто сообщает вам, что вы запросили действие копирования no commit, а затем обновите текущую ветку в результате копирования всего нуля этого пустого списка коммитов.

Помните, что git rebase работает копирует коммитов, как если бы git cherry-pick. То есть git rebase означает:

  • Найти некоторый набор коммитов, которые по какой-то причине недостаточно хороши.
  • Используя этот список коммитов, перейдите к одному конкретному коммиту,и начинайте копирование.
  • После того, как все коммиты будут скопированы, переместите имя текущей ветви так, чтобы оно указывало на последний из скопированных коммитов, тем самым отказываясь от любого из не скопированных коммитов, которые больше не доступны для поиска.

Использование -i превращает список коммитов в серию команд pick и открывает ваш редактор на итоговом листе команд. Каждая из этих pick команд выберет один оригинальный коммит для создания новой копии. В вашем случае список пуст, поэтому нет никаких команд pick для выполнения. В прошлом git rebase -i просто не удавалось (прерывалось) для этого случая, что было явно неправильно. Теперь git rebase -i устанавливает команду one noop. Если вы удалите все команды, содержащиеся в листе команд, которые прервут перебазирование.

Чтобы сделать список не пустым, вам нужно попасть в ветку с некоторыми коммитами, которые не являютсятакже на master. Обратите внимание, что в Git многие коммиты находятся на многих ветвях одновременно: работа, которую мы обычно даем git rebase, заключается в перемещении коммитов, которые находятся в некоторой ветке - обычно не master - поэтому они приходят после какого-то другого коммита, часто такого, который равен на master. Это технически невозможно: фиксация не может быть изменена, изменена или перемещена каким-либо образом, поэтому rebase действительно работает путем копирования коммитов, а затем отказывается от оригинала в пользу новых копий, которые появляются в новой точке:

...--o--o--o   <-- master
      \
       *--*--*   <-- branch-A (HEAD)

становится:

             *--*--*   <-- branch-A (HEAD)
            /
...--o--o--o   <-- master
      \
       *--*--*   [abandoned]

, где верхний ряд коммитов - это скопированные, сделанные путем копирования теперь заброшенного нижнего ряда, так что новые коммиты идут после последнегокоммит, который находится в master.

До перебазировки было три коммита, которые были только на branch-A, и два коммита, которые были только на master. После перебазирования и отказа от первоначальных трех коммитов теперь есть три коммита, которые только на branch-A и нет коммитов, которые только на master: branch-A содержит все коммиты, которые master содержит.

...