Я изменил два файла a
, b
в последней фиксации. Но файл b
не должен быть зафиксирован, каков рабочий процесс, чтобы исправить это?
Обновление (пару лет спустя)
Удалить его из индекса просто.
Верно: вы можете легко восстановить файл до его индексного содержимого, как предлагает более поздний ответ (написанный Мэттом Коннолли ):
git reset HEAD^ path/to/file/to/revert
HEAD^
позволяет файлу получить доступ к его содержимому в предыдущем коммите перед последним.
Тогда вы можете git commit --amend
, как я изначально писал ниже.
С Git 2.23 (август 2019 г.) вы можете использовать новую git restore
команду
git restore --source=HEAD^ --staged -- path/to/file/to/revert
короче:
git restore -s@^ -S -- path/to/file/to/revert
Опять же, вы можете git commit --amend
, как я изначально писал ниже.
Оригинальный ответ (январь 2011 г.)
Если это ваш последний коммит (и вы его нигде не нажимали), вы можете изменить его:
(сначала спрятать или сохранить b
)
git commit --amend
Затем удалите b, повторите коммит. Восстановите б, и все готово.
--amend
Используется для изменения кончика текущей ветки.
Подготовьте объект дерева, который вы хотели бы заменить последним коммитом, как обычно (это включает в себя обычный -i / -o и явные пути), и редактор журнала коммитов будет заполнен сообщением коммита из кончика текущей ветви.
Созданный вами коммит заменяет текущий совет - если это было слияние, родители текущего совета будут иметь родителей, поэтому текущий верхний коммит отбрасывается.
... Then stash/delete b, re-commit..
, Здесь не должно словоThen
бытьafter
? ---amend
после удаления / удаления b, ...git diff --name-only HEAD^
- (необязательно) использовать для отображения файлов, которые изменились за последний коммит.git reset HEAD^ path/to/file/to/revert
- сбросить индекс до последней версии, оставив рабочую копию нетронутой.git commit --amend
- изменить этот последний коммит, чтобы включить изменения индексаисточник
git commit -a --amend
(т. Е. Не добавлять файлы) на шаге 3, иначе вы внесете изменения в рабочую копию, которые вы пытаетесь удалить. Необязательный шаг 2.5 может также привестиgit checkout path/to/file/to/revert
к очистке вашей рабочей копии.git rm --cached path/to/file/to/revert
можно удалить файл, не удаляя его из дерева.В качестве альтернативы, если вы используете
git gui
, вы просто выбираете опцию «Amend last commit», добавленный файл появляется в списке «Staged», кликаете по его значку, чтобы переместить его в список «Unstaged» и делаете коммит.источник
Если вы хотите удалить b из вашего последнего коммита
Если вы хотите удалить все изменения в b в вашем последнем коммите
источник
git rm --cached
и покончить с резервным копированием / восстановлением танца (-1).Альтернатива, которая не требует взлома индекса, но тем не менее сохраняет старое сообщение коммита:
Мне это нравится, потому что (а) он использует команды, которые я регулярно использую, и (б) я могу сделать,
git add -p
чтобы выяснить, что именно я хочу зафиксировать.источник