Git checkout только что удалил мой репозиторий?

Общий вопрос: как можно использовать Git локально (т.е. самостоятельно) таким образом, чтобы объединение изменений из новой ветви в мастер или переход из ветви в ветку с помощью checkout не удаляло все в новой ветке и в мастере ветка?

Или, если кто-то хочет избежать git, удалив все и не оставляя резервных копий, необходимо ли работать с удаленным репозиторием (например, GitHub), а не только с локальным?

Конкретный случай:
У меня было две ветки для моего локального хранилища git, master а также equalityнаходится в папке .../ps/ps3, Я был в ветке equality и я хотел объединить свои изменения в master,

Итак, сначала я сделал git merge и это вернуло ошибку:

fatal: No remote for the current branch.

Итак, я решил, что мне нужно быть в master скорее, чем equality объединить мои изменения из equality в мастер. Итак, что я сделал дальше было: git checkout master, Это привело к следующей ошибке:

error: Your local changes to the following files would be overwritten by checkout: ps3/ps3.aux ps3/ps3.log ps3/ps3.pdf ps3/ps3.synctex.gz ps3/ps3.tex Please commit your changes or stash them before you switch branches. Aborting

Я интерпретировал эту ошибку следующим образом: ничего не произошло, я все еще в equality филиал, я должен сделать еще один коммит equality филиал, если я хочу, чтобы мои изменения в equality чтобы сохранить, когда я использую их, чтобы переписать master ветвь, а не git переписать с более ранней версии equality,

В моем окне терминала указывалось, что я все еще в каталоге .../ps/ps3 и в ветке equalityЯ не думал, что что-то не так. Когда я сделал git commit -am "Finished correct proof" Я не получил сообщение об ошибке.

5 files changed, 155 insertions(+), 29 deletions(-) rewrite ps3/ps3.pdf (72%)

Теперь это была либо эта команда, либо сразу же после нее, которая удалила все, а не только equality и каждый коммит в этой ветви, но также master и каждый коммит в ветке, и даже всю папку .../ps/ps3 хранилища.

я сделал git merge (Я еще был в ветке equality) и я получил сообщение об ошибке:

fatal: No remote for the current branch.

Это смутило меня, потому что зачем мне пульт, чтобы что-то делать? И какое это имеет отношение к моей нынешней ситуации? Я догадался, что это был только таинственный способ жаловаться, что слияние изменений из equality в master нужно сделать из master,

Так что в следующий раз я сделал git checkout master и не получил ошибку, просто Switched to branch 'master', Несмотря на отсутствие ошибок, я все еще думаю, что это, возможно, был шаг, который удалил все, так как после этого мой терминал больше не показывал, что я был в equality или же masterтаким образом, казалось бы, он должен был как минимум удалить весь репозиторий, то есть все файлы в нем и содержащую его папку.

Мой терминал все еще сказал, что я был в каталоге с именем ps3 даже при том, что это не также перечисляло ветку git, как это должно было иметь. Так что в следующий раз я сделал git merge а потом git merge equality но оба вернули ошибку:

fatal: Unable to read current working directory: No such file or directory

Тогда я сделал ls, не было выхода, то я сделал cd .. а также ls -a и каталог ps3 не был указан как подкаталог ps, Т.е. содержащая папка для репозитория, а также все и каждая ветка в нем были как-то удалены. Я даже не знал, что это возможно сделать с помощью Git - я думал, что худшее, что могло случиться, если я облажался, это то, что более ранняя версия в master ветка перезапишет более новую версию в equality филиал, и что я мог тогда просто сделать git revert несколько раз, чтобы вернуть equality ветка. И я думал git checkout просто перемещался между ветками, а не удалял все.

На этой странице это выглядит как git checkout master делает то, что я ожидал, а именно переключиться на master ветвь, а не удаляя все. Также эта страница заставляет это казаться git checkout должно помочь восстановить файлы, так почему же удалил все мои?

1 ответ

Решение

Во-первых, синтаксис: вы правы, что git merge должен быть запущен в целевой ветви (а затем вы должны дать ему название ветви, которую вы хотите ввести).

Что произошло: вы находились в подкаталоге вашей рабочей копии, когда запускали git checkout masterи удалил этот подкаталог, потому что master там не было никаких файлов. ("Невозможно прочитать текущий рабочий каталог" - это то, что происходит, когда вы удаляете каталог, когда внутри него находится оболочка.)

Хорошая новость: ничего не потеряно. Вы просто все еще в хранилище, а не снаружи, смотрите на пространство, которое когда-то занимало. Сейчас время бежать git merge equality и вы увидите ps3 Вернись.

Плохая новость: вы зафиксировали свои сгенерированные файлы (.aux, .log, так далее.). Не делай этого; может тебе стоит вернуться equality а также git commit --amend их не существует, прежде чем слить. (Это намного сложнее исправить после слияния.)

Другие вопросы по тегам