Как восстановить код?Git Noob - PullRequest
3 голосов
/ 18 марта 2011

Как мне восстановить мой код?

Я сделал следующие две команды:

git log -all -p
git reflog

Я вижу, что мой код там.Однако я не уверен, как их восстановить.

Вот что показывает рефлог:

23f50a6 HEAD@{0}: checkout: moving from filling-in-layout to master
39bdf8c HEAD@{1}: commit: Finished layout and routes
2ca279b HEAD@{2}: commit: Removed default Rails page
23f50a6 HEAD@{3}: checkout: moving from master to filling-in-layout
23f50a6 HEAD@{4}: merge static-pages: Fast-forward
436aabd HEAD@{5}: checkout: moving from static-pages to master
23f50a6 HEAD@{6}: commit: Done with static pages
c11e8b0 HEAD@{7}: commit: Added a Pages controller
436aabd HEAD@{8}: checkout: moving from master to static-pages
436aabd HEAD@{9}: commit: Improved the README and .Gitignore
a1d135d HEAD@{10}: commit (initial): Initial commit v.3

После того, как я сделал проверку, как показано в HEAD@{0}, весь мой код был удалени вернулся к состоянию HEAD@{9}.Я такой нуб в этом, и я изучаю RoR с Учебником Хартла.Но, следуя его советам, вся работа, которую я проделал за последние 5 часов, ушла.Они должны быть в коммите HEAD@{1}.Ааа .. я понятия не имею, о чем я говорю.Пожалуйста, помогите: /

Любая помощь будет высоко ценится!

Ответы [ 3 ]

6 голосов
/ 18 марта 2011

Прежде всего, вы должны быть очень осторожны, когда предлагаете или предлагаете использовать git reset --hard - это одна из немногих команд git, которая может вызвать безвозвратную потерю данных.Тем не менее, в вашей ситуации это, вероятно, было безопасно.

Если вы не добавили в свой репозиторий ничего странного, восстановить не из чего;вся ваша работа благополучно сидит на ветке;git merge filling-in-layout должен решить вашу проблему.Предполагая, что вы создали ветви непосредственно перед переключением на них, ваш репозиторий на данный момент выглядит следующим образом:

         static-pages
            master      filling-in-layout
o------o------X------o------o

, где X обозначает текущий коммит.Чтобы получить изменения в заполнении в макете, вы просто объединяете их с мастером.

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

            master
o------o------X
 \
  \  filling-in-layout
   o------o

git reset --hard filling-in-layout вы бы потеряли (отзывчиво) коммиты, которые были в мастере, а не в заполнении-в-макет.

4 голосов
/ 18 марта 2011

Вы бы сделали:

git reset --hard HEAD@{1}
1 голос
/ 18 марта 2011

У вас есть три ветви: главная, заполняющая верстка и статические страницы. Файлы на вашем диске отражают, какой коммит вы извлекли.

Когда вы извлекли мастер, файлы на диске были созданы в соответствии с файлами, переданными в мастер.

Если вы хотите вернуться к состоянию файлов в макете заполнения ветки, просто проверьте ветку:

git checkout filling-in-layout

Если вы хотите взять изменения, внесенные в заполнение макета, и импортировать их в основную ветку, объедините, как вы делали для HEAD @ {4}:

git checkout master
git merge filling-in-layout

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...