it-swarm-ru.tech

Как изменить последний коммит, чтобы удалить файл?

Я изменил два файла a, b в последнем коммите. Но файл b не должен передаваться, каков рабочий процесс, чтобы исправить это?

101
Xiè Jìléi

Обновление (пару лет спустя)

Ян Худек

Удалить его из индекса просто.

Верно: вы можете достаточно легко восстановить файл до его индексного содержимого, поскольку более поздний ответ (написанный Matt Connolly ) предлагает:

git reset HEAD^ path/to/file/to/revert

HEAD^ позволяет файлу получить доступ к его содержимому в предыдущем коммите перед последним.

Тогда вы можете git commit --amend , как я изначально писал ниже.


Оригинальный ответ (январь 2011 г.)

Если это ваш последний коммит (и вы его нигде не нажимали), вы можете изменить это:
(первый тайник или сохранение b)

 git commit --amend

Затем удалите b, повторите коммит. Восстановите б, и все готово.

--amend

Используется для изменения кончика текущей ветки.
Подготовьте объект дерева, который вы хотели бы заменить последним коммитом, как обычно (это включает в себя обычные -i/-o и явные пути), и редактор журнала коммитов заполнен сообщением коммита из кончика текущая ветка.
Созданный вами коммит заменяет текущий совет - если он был слиянием, родители текущего совета будут иметь родителей, поэтому текущий верхний коммит будет отброшен.

100
VonC
  1. git diff --name-only HEAD^ - (необязательно) используется для просмотра списка файлов, которые были изменены во время последнего коммита.
  2. git reset HEAD^ path/to/file/to/revert - для сброса index к этой последней версии, оставив рабочую копию нетронутой.
  3. git commit --amend - изменить последний коммит, включив index changes
60
Matt Connolly

В качестве альтернативы, если вы используете git gui, вы просто выбираете опцию «Amend last commit», добавленный файл появляется в списке «Staged», кликаете по его значку, чтобы переместить его в список «Unstaged» и делаете коммит.

13
Jan Hudec

Если вы хотите удалить b из вашего последнего коммита

git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend

Если вы хотите удалить все изменения в b в вашем последнем коммите

(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
10
pingo

Альтернатива, которая не требует взлома индекса, но тем не менее сохраняет старое сообщение коммита:

$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C [email protected]{1}

Мне это нравится, потому что (а) он использует команды, которые я регулярно использую, и (б) я могу сделать git add -p, чтобы выяснить, что именно я хочу зафиксировать.

3
Justin L.