Как мне вернуть выдвинутый коммит обратно в неустановленный?

Я пытался найти ответ на этот вопрос, но не нашел ничего похожего на эту проблему. Не стесняйтесь связать меня с ответом, если он уже есть.

То, что я сделал, это зафиксировал и выдвинул большое количество изменений как один коммит. Я не слил этот толчок в мастера, хотя. Теперь я хочу вернуться в состояние, прежде чем что-то ставить, чтобы я мог внести изменения в отдельные коммиты.

Я попытался создать новую ветвь (сохраненную работу) с внесенными изменениями, удалив исходную удаленную ветвь (логин пользователя), а затем объединить новую ветку с исходной локальной ветвью, но это просто возвращает меня туда, где я нахожусь теперь, с веткой 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.
Другие вопросы по тегам