Reset без потери уже зафиксированных файлов

Когда я случайно передал файл в неправильную ветвь, я обычно использую git reset --hard HEAD~1. Однако, используя этот метод, я вообще теряю все файлы. Есть ли способ reset совершить, не теряя отредактированные файлы?

Ответы

Ответ 1

не используйте --hard вместо --soft.

Таким образом, если вы хотите удалить свою последнюю фиксацию, вы сделали бы:

git reset --soft HEAD^

Ответ 2

Хотя Алекс очень прав, у меня может возникнуть соблазн попробовать другую последовательность:

Если мне нужна фиксация в еще не родившейся ветке:

git branch newbranch
git reset --hard HEAD^

Если мне нужна фиксация в существующей ветке:

git checkout otherbranch
git cherry-pick firstbranch
git checkout firstbranch
git reset --hard HEAD^

Полный пример ответа Alex

git reset --soft HEAD^
git checkout otherbranch
git commit -am "Message"

Обратите внимание, что последний пример будет неудачным, если попытка "поплавки" изменения на другую ветку завершится неудачно из-за конфликтов. Затем вам понадобится приложить/снять/применить, чтобы попасть в разрешение конфликта.

Ответ 3

для моего случая я предпочитаю использовать --mixed вместо того, чтобы найти это простое объяснение

git reset --mixed HEAD^