Відповіді:
Оновлення (через пару років)
Видалити його лише з індексу нереально.
Правда: ви можете скинути файл до його вмісту в індексі досить легко, як свідчить остання відповідь (написана Меттом Конноллі ):
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, повторно введіть. Відновіть b і ви закінчите.
--amend
Використовується для зміни кінчика поточної гілки.
Підготуйте об’єкт дерева, який ви хотіли б замінити останньою фіксацією, як зазвичай (це включає звичайні -i / -o та явні шляхи), і редактор журналу комісій закладається повідомленням фіксації з кінця поточної гілки.
Створене вами зобов’язання замінює поточний наконечник - якщо це було злиття, воно матиме батьків поточної підказки як батьків - тому поточна верхня комісія відкидається.
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
, ви просто вибираєте опцію "Змінити останню фіксацію", доданий файл відображається у списку "Поетапно", клацніть на його значку, щоб перемістити його до списку "Нестандартний" та здійснити фіксацію.
Якщо ви хочете видалити 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)
git rm --cached
і скасуйте резервний та відновлюючий танець (-1).
Альтернатива, яка не вимагає індексування хакерів, але, тим не менш, зберігає старе повідомлення про фіксацію:
$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}
Мені це подобається тому, що (а) він використовує команди, які я регулярно використовую, і (б) я можу зробити, git add -p
щоб зрозуміти, що саме я хочу зробити.
... Then stash/delete b, re-commit..
, Тут не повинно словоThen
бутиafter
? ---amend
після stach / delete b, ...