Я хотел посмотреть, смогу ли я внести изменения в файл, но после этого все файлы репо исчезли. Как восстановить предыдущую версию?
Вот что я сделал (обратите внимание, что я впервые подключаюсь к этому серверу Git). Сначала я инициализирую свой репозиторий:
$ rm -rf .git/
$ git init
$ git remote add origin https://remote.url/myProject.git
$ git commit -m "My first commit"
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.foundry/
.gitignore
.teamcity/
GitVersion.yml
README.md
config.ini
block.py
view.py
entities.py
nothing added to commit but untracked files present (use "git add" to track)
Затем, поскольку я только изменил entities.py, я добавил его в список для фиксации:
$ git add entities.py
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: entities.py
Untracked files:
(use "git add <file>..." to include in what will be committed)
.foundry/
.gitignore
.teamcity/
GitVersion.yml
README.md
config.ini
block.py
view.py
Git обнаружил изменение в entities.py, поэтому я решил, что все в порядке:
$ git commit -m "entities.py first commit"
[master (root-commit) 1dc09d9] entities.py first commit
1 file changed, 535 insertions(+)
create mode 100644 entities.py
$ git push -f origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 6.64 KiB | 1.66 MiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://remote.url/myProject.git
+ 4a0d8a5...1dc09d9 master -> master (forced update)
Когда я хотел проверить на сервере, сработал ли коммит, все файлы проекта исчезли! Есть только один файл: entities.py. Когда я запускаю git ls-tree
, возвращается только один файл:
$ git ls-tree -r master --name-only
entities.py
Как видите, мы потеряли все. Раньше я использовал TFS, и любую ошибку можно было легко откатить за 1 минуту, здесь я потратил часы, пытаясь найти нужную команду в книге Git, но не могу найти, как восстановить предыдущую версию? Можно ли хотя бы откатиться в Git?
Безуспешные попытки решить эту проблему
- Я попробовал этот ответ Как мне отменить большинство последние локальные коммиты в Git? и запустите
git reset HEAD~
, но у меня возникла следующая ошибка
fatal: ambiguous argument 'HEAD~': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
- Этот ответ Git - откат к предыдущей фиксации возвращает другое сообщение об ошибке:
$ git push origin HEAD~1:master
error: src refspec HEAD~1 does not match any
error: failed to push some refs to 'https://remote.url/myProject.git'
- В этом ответе не указано, как восстановить отсутствующие файлы: Как мне отменить 'git add' перед фиксацией?
rm -rf .git/
потерял свою местную историю;git push -f origin master
перезаписал то, что было на сервере. Вам нужно будет восстановить резервную копию вашего локального каталога.git
или спросить администратора вашего удаленного репозитория, возможно ли восстановить его из резервной копии. Вы можете повторно клонировать репозиторий, затемgit reset 4a0d8a5
. - person Joe   schedule 21.05.2021git fetch --tags; git reset --hard foo
Если на исходный мастер нет ссылки, вам придется найти sha. К счастью, он у вас уже есть:4a0d8a5
- person William Pursell   schedule 21.05.2021rm -rf .git/
был настоящим источником проблемы. Я бы сказал сильнее, чем потерял вашу локальную историю: это полностью уничтожило репозиторий Git (который хранится в том каталоге.git
), после чего вы сделали новый, в котором вообще не было коммитов. Затем вы сделали в нем один коммит с одним файлом в одном коммите. Вот почему вам пришлось принудительно нажать: чтобы сказать серверу отбросить все его коммиты в пользу этого нового и улучшенного единственного коммита с одним файлом в нем. - person torek   schedule 21.05.2021