Ответ 1
Вы можете сделать:
git revert abcd123
git revert --no-commit wxyz789
git commit --amend
... и затем напишите соответствующее сообщение фиксации, описывающее комбинированный эффект возврата обеих коммитов.
Это не серьезная проблема, просто я хочу знать, возможно ли это.
Скажем, у нас есть две коммиты, abcd123
и wxyz789
, которые происходят в несмежных, отдельных местах, еще в истории репо. Теперь позвольте сказать, что мы хотим их вернуть. Выполнение
git revert abcd123 wxyz789
приведет к двум отдельным коммитам, один из которых вернет abcd123
, а другой вернется wxyz789
.
Это все хорошо и хорошо, но что, если ошибки, которые мы хотим исправить в двух коммитах, логически связаны, и для целей самодокументации мы хотели бы сделать одно единственное сообщение, содержащее один сингл "Я сломал что-то так теперь я возвращаю файлы x, y и z" комментарий? Есть ли команда git, которая делает это?
(Я, конечно, знаю, что можно создать фиксацию, где я просто вручную исправляю все изменения, а затем нажимаю. Это болезненно по всем причинам.)
Вы можете сделать:
git revert abcd123
git revert --no-commit wxyz789
git commit --amend
... и затем напишите соответствующее сообщение фиксации, описывающее комбинированный эффект возврата обеих коммитов.
В случае сложных обратных преобразований, которые изменяют друг друга, revert --no-commit
может быть проблематичным.
Мое простое решение состояло в том, чтобы сделать реальный возврат и сквош:
git revert <all commits>
git rebase -i
И затем пометьте все реверты как squash
, кроме первого, чтобы создать единую фиксацию.
git revert -n <commits>
git commit
Первая команда будет делать все обратные, не создавая коммитов и не ставя окончательный результат (опция -n). После этого команда commit создает одиночную фиксацию.