Технически, Git делает новые коммиты из того, что есть в индексе , так что вы можете поменять текущий индекс (который обычно соответствует текущему коммиту) на некоторое другое содержимое индекса, соответствующее некоторому другому коммиту, а затемскорректируйте содержимое индекса и используйте его, чтобы сделать еще один коммит.Проблема заключается в том, что (а) это действительно сложно и (б) замена содержимого индекса означает перезапись текущего рабочего дерева в любом случае.
Следовательно, способ сделать это без создания отдельного клонадобавить еще одно рабочее дерево и индекс , что вы можете сделать с git worktree add
, при условии, что ваш Git не менее 2,5. 1 Это фактически добавляет набор из трех элементов:
- новое рабочее дерево, как подразумевается командой
git worktree add
; - новый индекс для предоставления индексной / промежуточной области для этого нового рабочего дерева;и
- новый
HEAD
для отслеживания того, какая ветвь в этом новом рабочем дереве.
Теперь вы можете cd
в новомwork-tree, делайте любую работу, которая вам нравится, git add
файлы, чтобы скопировать их обратно в индекс для этого рабочего дерева, и git commit
там, чтобы использовать индекс этого рабочего дерева для создания нового коммита, который обновляет ветку, котораяпроверяется в этом рабочем дереве.
(Если у вас нет git worktree
, просто сделайте еще один клон.)
1 Ваш Gitпредпочтительно должно быть не менее 2,15, так как были некоторые важные исправления ошибок, приведшие к 2,15.Наиболее важным из них является то, что в 2.5 - 2.14, если вы работаете в добавленном рабочем дереве, а затем прерываетесь и оставляете его на 14 или более дней, Git может разрушить то, что вы делали в этом рабочем дереве.Если вы просто что-то делаете быстро, а затем удаляете добавленное рабочее дерево, эти ошибки не будут кусаться.