Подтвердить что ты не робот

Возможно ли полностью удалить удаленный репозиторий 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, который все равно оставит ошибку, но файлы не будут беспокоить второе нажатие.

4b9b3361

Ответ 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, я думаю, что этот интерфейс довольно смешон)