Как я могу раскомментировать последнюю фиксацию в репозитории Git bare?


принимая во внимание, что есть несколько команд git, которые не имеют смысла в голом репозитории (потому что голые репозитории не используют индексы и не имеют рабочего каталога),

git reset --hard HEAD^ 

- это не решение, чтобы исправить последние изменения в такое хранилище.

поиск через Интернет, все, что я мог найти, относящиеся к теме этой, в котором мне представлены три способа сделать это:
1. "обновите ссылку вручную (которая включает в себя сантехнику)";
2. "git push -f не "голый " репозиторий";
3. "git branch -f this $that".

какое решение вы считаете более подходящим или какие другие способы существуют для этого? К сожалению, документация, которую я нашел о git bare repositories, довольно бедна.

4 81

4 ответа:

можно использовать . Чтобы удалить последнюю фиксацию, вы должны использовать:

$ 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.

если вы используете следующее в голом РЕПО:

git reset --soft <commit>

тогда вы не столкнетесь с проблемами, которые вы используете --hard и --mixed параметры в голом РЕПО, так как вы не пытаетесь изменить что-то голое РЕПО не имеет (т. е. рабочее дерево и индекс). В вашем случае конкретно вы хотели бы использовать (из голого РЕПО):

git reset --soft HEAD^

до переключение ветвей на удаленном РЕПО do:

git symbolic-ref HEAD refs/heads/<branch_name>

The git push -f должно работать нормально:
если вы клонируете это голое РЕПО, удалите последнюю фиксацию (git reset --hard HEAD^ Как вы упомянули, но в локальном не голом РЕПО) и отодвинуть (-f):

  • вы не меняете SHA1 для других коммитов, предшествующих удаленному.
  • вы уверены, что вы отбрасываете точное содержимое голого РЕПО за вычетом дополнительной фиксации (потому что вы только что клонировали его первым).

вы также можете использовать нотацию git refspec и сделать что-то вроде этого:

git push -f origin +<commit you want to revert to>:<destination_head | branch_name>

это заставляет обновление целевой ветви (как обозначено ref) к исходному фиксации, как обозначено +<object ref> часть.