Я боролся с этой же проблемой и придумал идеи, подобные Райану и Адаму Димитруку, и нашел их не очень удовлетворительными: сравнение финального различия сложно, а также не показывает, где была введена «ошибка», если вы найди это.
Мой текущий рабочий процесс перебазирования включает в себя сравнение каждого перебазированного коммита с оригинальным, поэтому я могу выявлять и исправлять потенциальные ошибки по мере их появления и не нужно повторять перебазирование. Я использую следующую пару псевдонимов git для облегчения этого:
rc = !git diff -w $(cat .git/rebase-merge/stopped-sha) > .git/rebase-merge/current-diff
rd = !git diff -w $(cat .git/rebase-merge/stopped-sha) | diff --suppress-common-lines .git/rebase-merge/current-diff - | cut -b 1-2 --complement | less
git rc
хранит разницу между HEAD
последней ревизией из ветви, которая перебазируется. После воспроизведения следующего коммита git rd
сравнивает этот сохраненный дифференциал с различием между новым HEAD
и следующим коммитом в ветви, которая была перебазирована. Следовательно, это показывает вам только разницу («ошибку»), вносимую при воспроизведении этого последнего коммита.
После проверки diff, позвоните git rc
, чтобы обновить сохраненный diff и продолжить ребаз.
Вместо того, чтобы вручную вызывать git rc
и git rd
, вы даже можете добавить их к своему git-rebase-todo
, чтобы они вызывались автоматически после каждого воспроизведения.