git - переупорядочить совершает безопасно - PullRequest
1 голос
/ 21 декабря 2011

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

Принять следующую последовательность коммитов

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

Использование git rebase -i для изменения порядка коммитов с A-B-C на A-C-B приводит к тому, что foo2 присутствует в HEAD.

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

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

Ответы [ 2 ]

0 голосов
/ 13 декабря 2013

Вы можете перебазировать, сравнить результат, а затем, возможно, сбросить до старого состояния.Простая комбинация

  • 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 для повторного введения скрытого "загрязнения"

следует делать ... Наверное, я попробуюсделать такой сценарий как можно скорее.

0 голосов
/ 21 декабря 2011

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

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

...