Возможно ли полностью удалить удаленный репозиторий Git?
Скажем, я совершу ошибку при первом нажатии на удаленный репозиторий Git. Могу ли я каким-то образом отменить это, чтобы репозиторий вернулся к исходному состоянию? У меня нет доступа к удаленному компьютеру, поэтому удаление каталога .git невозможно.
Проблема, насколько я вижу, заключается в том, что вы не можете "отменить" голову.
Это то, что я (или на самом деле коллега, который спросил об этом) сделал (я делаю локальный репозиторий "remote", чтобы каждый мог проверить это):
mkdir git-remote
cd git-remote
git init --bare
cd ..
mkdir git-local
cd git-local
git clone ../git-remote .
touch a
git add a
git commit -m "initial"
git push origin master
И в этот момент он понял, что он удалил неправильный материал в удаленный репозиторий.
Единственная идея, которая у меня была, это удалить все из его репо и & Git rm && Git push, который все равно оставит ошибку, но файлы не будут беспокоить второе нажатие.
Ответы
Ответ 1
Я думаю, что у вас может возникнуть проблема XY. Фактически вам не нужно возвращать удаленный репозиторий в исходное состояние, чтобы начать заново; вам просто нужно запустить локально, а затем принудительно нажать на пульте дистанционного управления.
# create a new repository that has the initial commit that you want
mkdir foo; cd foo; git init; ...; git commit
# set up a remote
git remote add origin <url-of-remote>
git branch --set-upstream master origin/master
# push your new history
git push -f
# delete obsolete remote branches
git push origin :deprecated-branch
Удаленный репозиторий никогда не возвращается в состояние без фиксации, но он заканчивается там, где вы хотите, и что все это имеет значение!
(Под капотом старые коммиты на самом деле все еще находятся в удаленном репозитории, но они остаются болтающимися, без ссылок, указывающих на них. Они будут автоматически удалены, когда git gc --auto
запускается нажатием на некоторые точка.)
Если вы действительно хотите по какой-то причине его почистить, вы можете установить receive.denyDeleteCurrent
в удаленный репозиторий и нажать-удалить все ветки, включая текущий. Я не понимаю, почему вам действительно нужно, хотя!
Ответ 2
Вы можете git revert
совершить, например. git revert HEAD
.
Имейте в виду, что содержимое, которое вы сделали, будет находиться в каталоге .git
. (Вы ничего не можете с этим поделать)
Невозможно фактически удалить фиксацию из истории без доступа к каталогу .git
.
Ответ 3
Когда вы говорите "первый толчок", вы имеете в виду самый первый толчок к ветки? Как и в коде вообще не было, прежде чем вы подтолкнули его. Если это случай...
Если вы хотите в первый раз нажать локальную ветвь foo на удаленную ветку, вы сделаете следующее:
git push origin foo:foo
Чтобы удалить удаленную ветвь foo, вы скажете git нажать "ничего":
git push origin :foo
Теперь вы можете начать с него, как вам нравится.
Честно говоря, я не уверен, что на самом деле физически остается на сервере, но с точки зрения полной перезагрузки истории веток это будет работать.
(fwiw, я думаю, что этот интерфейс довольно смешон)