Как отменить несколько коммитов как часть одной фиксации

Это не главная проблема, просто я хочу знать, возможно ли это или нет.

Допустим, у нас есть два коммита, abcd123 и wxyz789, которые происходят в несмежных, отдельных местах, далеко в истории РЕПО. Теперь предположим, что мы хотим их вернуть. Делать

git revert abcd123 wxyz789

приведет к двум отдельным фиксациям, один возврат abcd123 и другие возврата wxyz789.

Это все хорошо и хорошо, но что, если ошибки, которые мы хотим исправить в двух коммитах логически связаны, и для целей самостоятельной документации мы хотели бы сделать один одиночный коммит, содержащий один единственный"я что-то сломал, поэтому теперь я возвращаю файлы x, y и z" комментарий? Есть ли команда git, которая делает это?

(Я, конечно, знаю, что можно создать фиксацию, где я просто вручную исправляю все изменения, а затем нажимаю. Это больно для всех obbious причинам.)

3 ответов


вы можете сделать:

git revert abcd123
git revert --no-commit wxyz789
git commit --amend

... а затем напишите соответствующее сообщение фиксации, описывающее комбинированный эффект возврата обоих коммитов.


в случае сложных ревертов, которые изменяют друг друга,revert --no-commit может быть проблематично.

моим простым решением было сделать real revert, и сквош:

git revert <all commits>
git rebase -i

а затем отметьте все реверты как squash, кроме первого, чтобы создать одну фиксацию.


git revert -n <commits>
git commit

первая команда выполнит все реверты без создания каких-либо коммитов и выведет конечный результат (опция-n). После этого команда commit создает одну фиксацию.