Как я могу раскрыть последнее коммит в git голом репозитории?
Принимая во внимание, что существует несколько команд git, которые не имеют смысла в открытом репозитории (поскольку в голых репозиториях не используются индексы и нет рабочего каталога),
git reset --hard HEAD^
не является решением для разблокирования последнего изменения в таком репозитории.
Поиск через Интернет, все, что я мог найти по теме, this, в котором мне представлены три способа сделать это:
1. "обновить ref вручную (что связано с сантехникой)";
2. "git push -f
из не-голого репозитория";
3. "git branch -f this $that
".
Какое решение вам кажется более подходящим или какие другие способы для этого? К сожалению, документация, которую я нашел о git голых репозиториях, довольно плохая.
Большое спасибо,
Лавиния
Ответы
Ответ 1
Вы можете использовать команду git update-ref
. Чтобы удалить последнюю фиксацию, вы должны использовать:
$ git update-ref HEAD HEAD^
Или, если вы не находитесь в ветке, из которой вы не можете удалить последнюю фиксацию:
$ git update-ref refs/heads/branch-name branch-name^
Вы также можете передать sha1, если хотите:
$ git update-ref refs/heads/branch-name a12d48e2
См. документацию команды git-update-ref.
Ответ 2
Если вы используете следующее репозиторию с открытым репо:
git reset --soft <commit>
то вы не сталкиваетесь с проблемами, которые у вас есть с параметрами --hard
и --mixed
в режиме открытого репо, поскольку вы не пытаетесь изменить то, что не имеет голого репо (т.е. дерево работы и индекс), В вашем случае конкретно вы хотели бы использовать (из голого репо):
git reset --soft HEAD^
В отключить ветки на удаленном репозитории:
git symbolic-ref HEAD refs/heads/<branch_name>
Ответ 3
git push -f
должен работать нормально:
если вы клонируете это непокрытое репо, удалите последнюю фиксацию (git reset --hard HEAD^
, как вы упоминаете, но в локальном не-голом репо) и нажмите назад (-f
):
- вы не изменяете SHA1 для других коммитов, предшествующих удаляемому.
- вы уверены, что отбросили точное содержание голого репо за вычетом дополнительной фиксации (потому что вы только что клонировали его).
Ответ 4
Вы также можете использовать нотацию git refspec и сделать что-то вроде этого:
git push -f origin +<commit you want to revert to>:<destination_head | branch_name>
Это принудительно обновляет ветвь назначения (как обозначено ref) для фиксации источника, как показано частью +<object ref>
.