Как отменить несколько коммитов как часть одной фиксации
Это не главная проблема, просто я хочу знать, возможно ли это или нет.
Допустим, у нас есть два коммита, 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 создает одну фиксацию.