Беда с мерзавцем! Я случайно удалил файлы моего проекта? - PullRequest
1 голос
/ 20 октября 2011

Я пробую эту мерзавцу и думаю, что все испортила. Итак, у меня есть проект под названием Foo на моем компьютере. Я изменил каталог в этот проект. Затем сделал git init, а затем git commit в мой github. В нем говорилось, что не удалось отправить какой-либо реф на сервер, поэтому я гуглил его, а кто-то сказал, что сначала мне нужно сделать git pull. Итак, я сделал запрос git pull с моего сервера github, находясь в каталоге Project Foo. Теперь все файлы внутри моего каталога Foo проекта были удалены, и только файлы из запроса git pull хранятся внутри каталога моего Project Foo.

Помогите, как мне восстановить мои файлы?

РЕДАКТИРОВАТЬ: вот история терминала, http://codepad.org/cg9Gi7Ii - команды из этого журнала вокруг точки исчезновения файлов:

$ ls
Models      css     js      utils
README      index.html  styles
$ git init
Initialized empty Git repository in /Users/MacBoss/Documents/workspace/BlackboardCanvas/.git/
$ git add .
$ git remote add origin git@github.com:dchhetri/Demo-s.git
$ git push origin master
error: src refspec master does not match any.
error: failed to push some refs to 'git@github.com:dchhetri/Demo-s.git'
$ git remote add origin git@github.com:dchhetri/Demo-s.git
fatal: remote origin already exists.
$ git push origin master
error: src refspec master does not match any.
error: failed to push some refs to 'git@github.com:dchhetri/Demo-s.git'
$ git pull  failed to push some refs to 'git@github.com:dchhetri/Demo-s.git'
fatal: 'failed' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:dchhetri/Demo-s
 * [new branch]      master     -> origin/master
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "master"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.
$ git pull  failed to push some refs to 'git@github.com:dchhetri/Demo-s.git'
fatal: 'failed' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
$ git pull git@github.com:dchhetri/Demo-s.git
From github.com:dchhetri/Demo-s
 * branch            HEAD       -> FETCH_HEAD
$ ls
AStarDemo.jar

Ответы [ 3 ]

3 голосов
/ 20 октября 2011

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

$ ls
Models      css     js      utils
README      index.html  styles

$ git init
Initialized empty Git repository in /Users/[...]/BlackboardCanvas/.git/

$ git add .

$ git remote add origin git@github.com:dchhetri/Demo-s.git

$ git pull git@github.com:dchhetri/Demo-s.git
From github.com:dchhetri/Demo-s
 * branch            HEAD       -> FETCH_HEAD

$ ls
AStarDemo.jar

(Во-первых, чтобы объяснить ситуацию, в которой вы находитесь, у вас уже есть ветвь master в вашемGitHub репозиторий. В самой последней версии этой ветки есть только один файл с именем AStarDemo.jar. Причина, по которой ваши попытки протолкнуть ранее потерпели неудачу, заключается в том, что вы пытаетесь перезаписать эту ветку master вашей локальной веткой.Обычно вы можете выдвинуть коммит в ветку только в том случае, если ваш коммит содержит историю этой ветки. Если вы не «форсируете» толчок, добавив опцию -f, git не позволит вам сделать это.история терминала, с которой вы связались, причина того, что некоторые из ваших попыток проталкивания не увенчались успехом, заключается в том, что вы пытаетесь git push origin master до того, как создали какие-либо коммиты - ваш локальный master еще не существует.)

В разделе команд, которые я цитировал, вы размещаете все файлы в своем каталоге (с помощью git add .), но не продолжаете их коммитить.Тогда вы, кажется, поражены тем, что мне кажется ошибкой в ​​git - команда git pull <URL>, когда она выполняется в хранилище без коммитов, похоже, стирает ваш индекс (область подготовки) без предупреждения.Причина, по которой мне это кажется ошибкой, заключается в том, что если вы аналогичным образом организовали и не зафиксировали изменения, но ваш HEAD действительно указал на коммит, git pull <URL> потерпит неудачу, заявив, что это приведет к потере вашеголокальные изменения.В этом случае кажется, что вы выбросили ваши подготовленные файлы.(Я могу воспроизвести это с помощью git версии 1.7.5.4.)

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

1 голос
/ 20 октября 2011

Это не должно быть причиной.

Думайте о Git как о двух учениках на экзамене. Они знают некоторые ответы на экзамены и время от времени заглядывают друг в друга в поисках последних изменений и применяют те же изменения к своей работе.

Когда вы «вытягиваете» из github, он только копирует изменения и применяет их.

Теперь то, что МОЖЕТ удалить ваши файлы, это "git stash". Это временно скрывает ваши изменения, и вы можете увидеть их с помощью «git stash list» или вернуть их с помощью «git stash pop».

0 голосов
/ 20 октября 2011

Чтобы отменить извлечение, нажмите следующую команду:

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