Chcę wymusić wypychanie, na przykład, mojego tagu 1.0.0
do mojej zdalnej master
gałęzi.
Teraz wykonuję następujące czynności:
git push production +1.0.0:master
Chcę wymusić wypychanie , ponieważ zależy mi tylko na tym, aby kod wewnątrz1.0.0
znacznika został wypchnięty domaster
gałęzi w zdalnym repozytorium.
Co ja robię źle?
Aktualizacja nr 1
Kiedy włączam SSH do mojego serwera, na którym znajduje się moje repozytorium Git i git branch -l
wykonuję je, nie widzę też master
gałęzi na liście.
Aktualizacja nr 2
Po uruchomieniu git tag -l
z wnętrza zdalnego repozytorium Git widzę, że master
jest na liście, co oznacza, że po uruchomieniu:
git push production 1.0.0:master
W rzeczywistości wypchnął tag i utworzył tag o nazwie master
zamiast nowej gałęzi .
Chcę w zasadzie wepchnąć zawartość znacznika 1.0.0
do master
gałęzi zdalnego repozytorium Git.
Odpowiedzi:
Prawdopodobnie zawodzi, ponieważ
1.0.0
jest to tag z adnotacjami. Być może zobaczyłeś następujący komunikat o błędzie:Znaczniki z adnotacjami mają swój własny odrębny typ obiektu, który wskazuje na oznaczony obiekt zatwierdzenia. Gałęzie nie mogą użytecznie wskazywać na oznaczanie obiektów, tylko zatwierdzać obiekty. Musisz „odkleić” opisany tag z powrotem, aby zatwierdzić obiekt i zamiast tego go przesunąć.
Jest jeszcze inna składnia, która również działałaby w tym przypadku, ale oznacza to coś nieco innego, jeśli obiekt znacznika wskazuje na coś innego niż zatwierdzenie (lub obiekt znacznika, który wskazuje (obiekt znacznika, który wskazuje na…) zatwierdzenie) .
Te składnie obierania znaczników są opisane w git-rev-parse (1) w części Określanie poprawek .
źródło
git push rep +tag:master
utworzy tag o nazwie master zamiast gałęzi.git push rep +tag~0:master
(ponownie, gdy master nie istnieje jako gałąź lub tag) zakończy się niepowodzeniem z komunikatem „error: niemożność wypchnięcia do niewykwalifikowanego miejsca docelowego”. Polecenie, które zrobiłoby to, co chciałeś (zanim istniała jakaś gałąź / znacznik główny ) togit push rep +tag~0:refs/heads/master
(refs/heads/
przestrzeń nazw, w której gałęzie są przechowywane).~{commit}
Składnia jest dosłowna (tzn. zawsze te dziewięć znaków); słowocommit
nie jest tutaj symbolem zastępczym.źródło
git push production :1.0.0
.git push production :refs/tags/1.0.0
aby usunąć tylko tagTworzę taki tag, a następnie przekazuję go do GitHub:
źródło
Aby przesłać pojedynczy tag:
git push <reponame> <tagname>
Na przykład,
git push production 1.0.0
. Tagi nie są powiązane z gałęziami, są powiązane z zatwierdzeniami.Jeśli chcesz mieć zawartość znacznika w gałęzi master, zrób to lokalnie na swoim komputerze. Zakładam, że nadal rozwijasz się w lokalnym oddziale głównym. Więc
git push origin master
wystarczy.źródło