Jak Mogę dodać ostatni commit do repozytorium Git bare?

Biorąc pod uwagę, że istnieje kilka komend git, które nie mają sensu w gołym repozytorium (ponieważ gołe repozytoria nie używają indeksów i nie mają katalogu roboczego),

git reset --hard HEAD^ 

Nie jest rozwiązaniem pozwalającym wyróżnić ostatnią zmianę w takim repozytorium.

Przeszukując Internet, jedyne, co udało mi się znaleźć związane z tym tematem, to to , w którym przedstawiono mi trzy sposoby zrobienia tego:
1. "zaktualizuj ref ręcznie (co obejmuje hydraulika)";
2. "git push -f from a non-bare repozytorium";
3. "git branch -f this $that".

Które rozwiązanie Twoim zdaniem jest bardziej odpowiednie lub jakie są inne sposoby, aby to zrobić? Niestety, dokumentacja, którą znalazłem o repozytoriach Git bare jest dość uboga.

Author: ROMANIA_engineer, 2011-01-07

4 answers

Możesz użyć komendy git update-ref. Aby usunąć ostatni commit, należy użyć:

$ git update-ref HEAD HEAD^

Lub jeśli nie jesteś w gałęzi, z której nie możesz usunąć ostatniego commita:

$ git update-ref refs/heads/branch-name branch-name^
Możesz też zdać sha1 jeśli chcesz:
$ git update-ref refs/heads/branch-name a12d48e2

Zobacz dokumentację Git-update-ref.

 115
Author: Sylvain Defresne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-10 03:00:15

Jeśli użyjesz następującego w nagim repo:

git reset --soft <commit>

Wtedy nie napotkasz problemów, które masz używając opcji --hard i --mixed w nagim repo, ponieważ nie próbujesz zmienić czegoś, czego nie ma nagi repo (tj. roboczego drzewa i indeksu). W Twoim przypadku konkretnie chciałbyś użyć (z gołego repo):

git reset --soft HEAD^

To switch branches on the remote repo do:

git symbolic-ref HEAD refs/heads/<branch_name>
 27
Author: Hazok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:07

git push -f powinno działać dobrze:
jeśli sklonujesz ten nagi repo, Usuń ostatni commit (git reset --hard HEAD^, Jak wspomniałeś, ale w lokalnym nie nagim repo) i odepchnij (-f):

  • nie zmieniasz żadnego SHA1 dla innych commitów poprzedzających ten, który usuwasz.
  • jesteś pewien, że odepchniesz dokładną zawartość nagiego repo minus dodatkowy commit (ponieważ właśnie sklonowałeś go jako pierwszy).
 7
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-07 11:44:02

Możesz również użyć notacji git refspec i zrobić coś takiego:

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

Wymusza aktualizację gałęzi docelowej (oznaczonej przez ref) do commita źródłowego oznaczonego przez +<object ref> część.

 2
Author: alup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-31 08:03:37