Как отменить жесткий сброс в Git Gui или Gitk в Windows? - PullRequest
3 голосов
/ 02 октября 2010

Я использую Git Gui и Gitk в Windows.Как мне отменить полный сброс за последние два часа?

(возможно ли это сделать из этих приложений без использования командной строки?)

Я видел этоSO post , в котором говорится, что отмена возможна до того, как Git выполняет сборку мусора.Я мог бы закрыть и снова открыть одно или оба этих приложения.

Ответы [ 3 ]

4 голосов
/ 17 января 2011
  1. Если у вас были изменения в вашем рабочем дереве, которые не были зафиксированы, когда вы выполняли git reset --hard, эти изменения исчезли навсегда. Вы должны использовать свою память (в своей голове), чтобы воссоздать их.

  2. Изменения, которые были совершены после принятия, на которое вы переключились, не теряются. Скорее всего, они не имеют указаний на них, что затрудняет их поиск. Инструмент для перечисления всех низкоуровневых изменений в репо - git reflog. После того, как вы найдете фиксацию, которую хотите отменить, наблюдайте за номером хеша в первой строке и используйте git reset --hard #hashnumber или git checkout #hashnumber, чтобы получить изменения. Я нашел эту полезную строку на http://quirkygba.blogspot.com/2008/11/recovering-history-with-git-reflog.html:

gitk --all $(git reflog | cut -c1-7)

Это отобразит все скрытые изменения в gitk, где вы можете удобно просматривать, указывать, щелкать и создавать новые ветви.

Как вы упомянули, ссылки, на которые нет ссылок, обычно хранятся в хранилище в течение 30 дней.

РЕДАКТИРОВАТЬ: я должен добавить здесь, чтобы мое редактирование было не менее 6 символов. Я знаю, что иногда исправления кода на меньше , чем 6 символов, но, в конце концов, в этом посте может быть что-то еще для улучшения.

2 голосов
/ 02 октября 2010

См. Ответы Брайана Рихмана и Пэт Нотц в ссылке в вопросе.

Одним из решений является использование командной строки.

В Windows откройте DOS в каталоге, содержащем каталог .git.

Введите что-то вроде следующего, чтобы увидеть, чтокоммит, к которому вы хотите перейти:

"c:\Program Files\Git\bin\git.exe" reflog

Чтобы перейти к определенному коммиту, введите что-то вроде следующего, где последним выражением является код SHA1 этого коммита:

"c:\Program Files\Git\bin\git.exe" reset --hard 5eb4080
0 голосов
/ 02 октября 2010

Я не думаю, что вы можете отменить полный сброс, чтобы вернуть незафиксированные изменения - вы можете отменить rebase , потому что BLOB-объекты все еще доступны, но если вы никогда не вносили свои последние изменения в Git когда-либо , все, что он переписал, скорее всего, история.Хотелось бы узнать, что я не прав!

...