Как мне вернуть выдвинутый коммит обратно в неустановленный?
Я пытался найти ответ на этот вопрос, но не нашел ничего похожего на эту проблему. Не стесняйтесь связать меня с ответом, если он уже есть.
То, что я сделал, это зафиксировал и выдвинул большое количество изменений как один коммит. Я не слил этот толчок в мастера, хотя. Теперь я хочу вернуться в состояние, прежде чем что-то ставить, чтобы я мог внести изменения в отдельные коммиты.
Я попытался создать новую ветвь (сохраненную работу) с внесенными изменениями, удалив исходную удаленную ветвь (логин пользователя), а затем объединить новую ветку с исходной локальной ветвью, но это просто возвращает меня туда, где я нахожусь теперь, с веткой user-login, не содержащей ничего для добавления / принятия.
Итак, как мне вернуть все эти изменения, чтобы я мог просмотреть и настроить их индивидуально (используя git add -p)?
2 ответа
Если это общий репозиторий и есть вероятность того, что кто-нибудь уже получил ваши коммиты, не пытайтесь изменить свою историю. Если кто-то другой уже получил ваши коммиты, вы будете сражаться в проигрышной битве, чтобы согласовать любые дополнительные коммиты, которые были сделаны с вашей ошибочной веткой.
Если это не так, тогда вы захотите сделать некоторую комбинацию сброса, перезагрузки и нажатия с -f
,
Например, вы можете сбросить с помощью git reset --soft <hash>
на ветке в вопросе. Это вернет голову ветви к этому коммиту, оставив все последующие коммиты без изменений. Вы могли бы тогда бежать git add -p
выборочно изменить ваши изменения постепенно.
Как только вы довольны веткой, вы можете нажать git push -f
, Это принудительно перезапишет историю на удаленном компьютере, но не может удалить историю, которую кто-либо другой мог бы извлечь.
git reset --soft HEAD~1
чтобы получить все HEAD
изменения в стадии.
$> man git-reset
...
git reset [<mode>] [<commit>]
...
--soft
Does not touch the index file nor the working tree at all (but
resets the head to <commit>, just like all modes do). This leaves
all your changed files "Changes to be committed", as git status
would put it.