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.
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.
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>
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).
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ęść.
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