2011-12-21 2 views
1

Я обнаружил, что переупорядочение через git rebase -i может не создавать одно и то же дерево конечных результатов при работе с удаленными файлами - и может делать это без предупреждения или сообщения об ошибке.git - переупорядочить совершает безопасно

Возьмем следующую последовательность фиксаций

 
A - Add foo1 
B - Add foo2 
C - Remove foo2, Add Foo3 

Использование git rebase -i для изменения порядка коммиты из А-В-С-А-С-В приводит к foo2 присутствует в HEAD.

Есть ли способ переупорядочить коммиты, которые лают, если изменение порядка изменит окончательное дерево?

Я думаю, git rebase использует git am для исправления. Я не вижу никаких соответствующих аргументов в git am, которые могут быть использованы для принудительного сбоя при удалении несуществующего файла, что, я думаю, потребуется. Должен ли я исправлять исходный код git, чтобы получить то, что я хочу?

+0

* «Я думаю, что git rebase внутренне использует git am для применения исправлений». * Я так не думаю ... Я считаю, что git использует информацию истории при перезагрузке. – maaartinus

ответ

0

Вы сделали содержимое файлов разными? Это можно рассматривать как движение, если они слишком похожи. Когда вы пытаетесь применить патч, вы должны прекратить конфликт, чтобы удалить файл, которого нет.

Надеюсь, это поможет.

+0

Это не проблема. Все 3 файла находятся в дереве A-C-B после rebase -i. попробуй. (файлы, которые я использовал, были пусты) – CoderBrien

0

Вы можете переустановить, сравнить результат, а затем, возможно, вернуться к старому состоянию. Простое сочетание

  • git stash save --include-untracked попасть в чистое состояние
  • git rev-parse HEAD, чтобы получить хэш тока фиксации
  • git rebase делать реальную работу
  • git checkout the_previously_saved_hash . восстановить состояние до перебазирования
  • git clean -fd, чтобы избавиться от всех лишних файлов
  • git commit -m "Undoing the changes introduces by rebase.", который может потерпеть неудачу, если перестановка не ввела никаких изменений (Эта ошибка может быть проигнорирована)
  • git stash pop повторно ввести прятали одноразовое «загрязнение»

должны делать ... Я предполагаю, что я пытаюсь сделать сценарий, как это только что-то Мне тоже нужно.

Смежные вопросы