Отменить или отменить git am --решено

Я вручную применил патч, и после того, как я сделал, я сделал следующее

git add . 
git am --resolved 

Я упустил из виду то, что файл rej также присутствовал и не был отслежен, но git add . добавили все файлы в область подготовки, как и ожидалось git am --resolved Я закончил тем, что передал свой файл rej, у которого были различия патча.

Я сделал git reset --soft HEAD^ чтобы я мог отменить коммит и просто зафиксировать файл, измененный патчем.

Но проблема в том, что сообщение о коммите и автор больше не будут извлекаться из файла патча, так как я сделал коммит git.

Как отменить разрешенный git, чтобы я мог удалить файл rej и разрешить снова, чтобы сообщения о коммитах и ​​автор не были повреждены?

2 ответа

Решение

Похоже, что в патче только один коммит.

Самый простой способ в этом случае (только один коммит) git reset вернуться к неверному коммиту, затем удалить лишний файл (git rm ...) и использовать git commit --amend, --amend вариант говорит git commit повторно использовать существующее сообщение и автора и сделать новый коммит из текущего индекса, отбросив старый коммит в сторону.

Если есть несколько коммитов, все содержащие .rej файл, вам нужно будет использовать ответ Леона или что-то подобное (например, более длинная ручная перебазировка). Вы можете ограничить количество коммитов, копируемых git filter-branch так как фильтрация копирует каждый такой коммит, что очень медленно.

Чтобы вернуться к неверному коммиту, используйте git reset --soft HEAD@{1} как сказал Леон

Вы могли бы просто сделать

git filter-branch --tree-filter 'rm rejfile' HEAD^..

Теперь вы должны вернуться в ошибочно совершенное состояние с

git reset --soft HEAD@{1}

а затем запустить git filter-branch команда сверху.

Другие вопросы по тегам