Git Checkout вернул код в старый коммит, как вернуться обратно? - PullRequest
5 голосов
/ 01 сентября 2011

Я работал над некоторым кодом, которым я управляю с помощью git.Ранее я использовал commit, чтобы сохранить версию моего кода, которая работала.Позже я решил переделать код, так как он нуждался в некоторых новых функциях и был плохо спроектирован.После того, как я заработал, я сделал еще один коммит.После выполнения git log я увидел, что меня нет ни на одной ветке.Итак, я сделал "мастер проверки Git".Это вернуло к версии моего старого кода, с git log, показывающим мой последний коммит.Это было МНОГО работы, поэтому я хотел знать, есть ли способ отменить то, что я сделал, и вернуть мой последний код.Заранее спасибо за помощь.

Ответы [ 2 ]

13 голосов
/ 01 сентября 2011

Проверьте git reflog и найдите свой коммит.

Самое безопасное - создать ветку при «потерянном» коммите, а затем проверить, все ли в порядке, используя gitk или git log -p

git branch recovery HEAD@{1} # use whatever commit you need
git log -p recovery

Эта новая ветвь затем может быть объединена, перебазирована поверх мастера, зафиксирована в вишне и т. Д. В git есть много возможностей выстрелить себе в ногу, но также есть еще несколько способов повторно прикрепить эту ногу ( возможно, к вашим рукам).

Если вы не сделали никаких новых коммитов на мастере, вы можете просто объединить рассматриваемый коммит, который будет решен как ускоренное слияние с помощью git:

git merge HEAD@{1} # use whatever commit you need

Если вам не нужны какие-либо новые коммиты на master, и вы просто хотите сбросить ветку master на этот потерянный коммит, используйте git reset. Чтобы не потерять какие-либо изменения, сначала сохраните изменения в своей рабочей копии (git stash save)

git reset --keep HEAD@{1}

В следующий раз, когда вы обнаружите, что не находитесь ни в одной ветке, используйте git branch newbranch или git checkout -b newbranch

1 голос
/ 01 сентября 2011

Используйте git reflog, получите ша своего нового коммита (или вы можете ссылаться на него в формате, подобном HEAD@{1}) и используйте git cherry-pick, git merge и т. Д., Чтобы ввести коммит мастеру.

...