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
их не существует, прежде чем слить. (Это намного сложнее исправить после слияния.)