fatal: Obecny główny oddział nie ma gałęzi upstream


227

Próbuję wypchnąć jeden z moich projektów do github i wciąż pojawia się ten błąd:

peeplesoft@jane3:~/846156 (master) $ git push

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

     git push --set-upstream origin master

Więc spróbowałem i otrzymałem to:

peeplesoft@jane3:~/846156 (master) $ git push --set-upstream origin master

fatal: Authentication failed

Inny wątek przepełnienia stosu sugerował, że wypróbowałem następujące, z rozczarowującymi wynikami.

peeplesoft@jane3:~/846156 (master) $ git push -u origin master

fatal: Authentication failed

Potem spróbowałem:

peeplesoft@jane3:~/846156 (master) $ git config remote.origin.push HEAD

peeplesoft@jane3:~/846156 (master) $ git push

fatal: Authentication failed

Jakieś wskazówki?


1
Repo musi istnieć w github, zanim będziesz mógł na niego naciskać. Czy to? A czy repo, nad którym pracujesz, ma klon?
mat

Sklonowałem repozytorium z Github, a następnie dodałem 1 wiersz do pliku readme, a następnie spróbowałem go wypchnąć.
user1524361

1
otrzymywałem ten sam błąd, ponieważ zapomniałem zatwierdzić pliki
Mateen

3
-u i --set-upstream są takie same
brainLoop

Chciałem, aby wszyscy znali gitpolecenia opublikowane przez PO, pomogły mi nawet bardziej niż odpowiedzi
Nathan

Odpowiedzi:


94

Naprawiłeś wypychanie, ale niezależnie od tego problemu wypychania (który wyjaśniłem w „ Dlaczego muszę jawnie wypchnąć nowy oddział? ”: git push -u origin masterLub git push -u origin --all), musisz teraz rozwiązać problem z uwierzytelnianiem.

To zależy od twojego adresu URL (ssh jak w ' git@github.com/yourRepolub https jak w https://github.com/You/YourRepo)

W przypadku adresu URL https:

Jeśli Twoje konto jest chronione przez uwierzytelnianie dwuskładnikowe , zwykłe hasło nie będzie działać (dla adresu URL https), jak wyjaśniono tutaj lub tutaj .

Ten sam problem, jeśli hasło zawiera znak specjalny (jak w tej odpowiedzi )

Jeśli https nie działa (ponieważ nie chcesz generować klucza dodatkowego, PAT: osobistego tokena dostępu), możesz przełączyć się na ssh, jak pokazałem tutaj .


Jak zauważył qwerty w komentarzach, możesz automatycznie utworzyć gałąź o tej samej nazwie na pilocie za pomocą:

git push -u origin head 

Czemu?

  • HEAD (zobacz .git\HEADplik) ma refspec aktualnie wyrejestrowany oddziału (na przykład ref: refs/heads/master)
  • domyślna polityka wypychania jest prosta

Ponieważ refpec użyty do tego wypychania to head: (brak miejsca docelowego), brakujący :<dst>sposób zaktualizowania tego samego odwołania co <src>(head, który jest gałęzią).

To nie zadziała, jeśli HEAD zostanie odłączony .


1
super, właśnie tego potrzebujemy, aby naprawić problem związany z podstawową przyczyną, a nie tylko naprawić go na powierzchni
cykl roboczy

Jeśli jesteś w dowolnym oddziale, jest to przydatne git push origin head -u. Automatycznie tworzy gałąź o tej samej nazwie na pilocie.
Qwerty

1
@Qwerty Dziękuję, dobry punkt. W odpowiedzi umieściłem twój komentarz (z dodatkowymi szczegółami), aby był bardziej widoczny.
VonC

115

Możesz także użyć następującego polecenia:

git push -u origin master

To tworzy (-u) kolejną gałąź w twoim zdalnym repozytorium. Po dokonaniu uwierzytelnienia za pomocą ssh to znaczy.


2
Jest to naprawdę istotne dla problemu, ponieważ problem dotyczy uwierzytelnienia. Stwierdził również, że już tego próbował na swoim stanowisku.
Mike Precup,

2
Głosowałem z dwóch powodów. Pierwszy: OP stwierdził, że już tego próbował. Drugi: -uopcja to skrót do --set-upstreamopcji, która nie ma nic wspólnego z tworzeniem nowej gałęzi. Z dokumentacji opcji -ulub--set-upstream : „Dla każdej gałęzi, która jest aktualna lub pomyślnie wypchnięta, dodaj referencję upstream (śledzenia), używaną przez bez argumentów git-pull [1] i inne polecenia.”. Właściwie nie rozumiem, dlaczego ta odpowiedź została tak wysoko oceniona, ponieważ wprowadza w błąd.
louisfischer

38

Najwyraźniej ten komunikat o błędzie pojawia się również, gdy zapomnisz --allparametr przy pierwszym naciśnięciu. napisałem

git push -u origin

który dał ten błąd, powinien był być

git push -u origin --all

Och, jak lubię te błędy kopiuj-wklej ...


3
Dzięki. Otrzymałem ten błąd w programie Visual Studio Code i zadziałało, ale w kontekście wielu programistów ktoś może wyjaśnić, co to zrobiło?
Hell.Bent


13

Spróbuj tego scenariusza

git push -f --set-upstream origin master

7
Powinieneś podać więcej wyjaśnień na temat tego, jak i dlaczego to działa.
Benoît Latinier

6
„nieźle” to naprawdę złe wytłumaczenie czegokolwiek. „nieźle” sprawia, że ​​twoja odpowiedź jest naprawdę zła.
GhostCat

Nie robi to nic, aby rozwiązać wspomniany błąd OP: „Uwierzytelnianie nie powiodło się”
Sean the Bean

Tak. To zadziałało dla mnie. Myślę, że to wymusza zatwierdzenie gałęzi upstream (zdalnej).
vkg

12

Jeśli zdefiniujesz akcję, git pushktóra powinna zostać podjęta, jeśli w wierszu poleceń nie podano polecenia refspec, nie jest on skonfigurowany w trybie zdalnym i żadna z opcji refspec nie jest sugerowana przez żadną z opcji podanych w linii poleceń.

Po prostu to zrób:

git config --global push.default current

następnie

git push

1
Musisz zdawać sobie sprawę, że powoduje to zmianę globalnych ustawień git, co może mieć niekorzystne skutki. Ale tego właśnie szukałem.
Mavamaarten

@Mavamaarten jakie są potencjalne negatywne skutki?
Kosii

7

Cóż, miałem takie same problemy podczas przesyłania i rozwiązałem to, robiąc to samo, co mówi: wcześniej próbowałem przepchnąć terminal do mojego repozytorium w systemie Linux przez https jak

git push https://github.com/SiddharthChoudhary/ClientServerCloudComputing.git

Ale nie uzyskałem żadnego rezultatu, dlatego zszedłem głębiej i spróbowałem:

git push --set-upstream https://github.com/SiddharthChoudhary/ClientServerCloudComputing.git master

I zadziałało. W ten sposób zostanie wyświetlony monit o podanie nazwy użytkownika i hasła. Ja również wygenerowany token i zamiast Hasło ja wklejony token, a zatem zostało zrobione pomyślnie.

  1. Aby wygenerować token, przejdź do konta Github i w Ustawieniach programisty, a następnie utwórz kolejny token.
  2. Po uzyskaniu tego skopiuj ten token i wklej w pytaniu o hasło, gdy zostanie o to poproszony.

6

z bardzo prostej strony, kiedy już masz inne gałęzie, nie możesz po prostu użyć do pchania gałęzi

git push

Ale musisz teraz określić gałąź, nawet jeśli masz kasę, którą chcesz przesłać, więc

git push origin <feature_branch>

Gdzie może być nawet mastergałąź


5

Popełniłem prosty błąd, zapominając o popełnieniu:

git commit -m "first commit"

potem git push origin masterpracował.


4

Miałem ten sam problem

wprowadź opis zdjęcia tutaj

Rozwiązałem to, co użyłem poniżej polecenia

$ git branch --set-upstream develop origin/develop

i doda konfigurację do pliku konfiguracyjnego w folderze .git.

wprowadź opis zdjęcia tutaj



3

Jest na to proste rozwiązanie, które działało dla mnie na macOS Sierra. Zrobiłem te dwa polecenia:

git pull --rebase git_url(Ex: https://github.com/username/reponame.git)
git push origin master

Jeśli po każdym wypychaniu w przyszłości pojawi się błąd krytyczny dotyczący wysyłania danych, uruchom po prostu:

git push --set-upstream origin master

0

1. Komputer i twój github są powiązane. Użyj SSH. Kod komputerowy, więc nie musisz przesyłać zweryfikowanego, wprowadź opis obrazu tutaj

2. git nie może zarządzać pustym folderem. Musisz więc napisać taki plik readme.md zapisany w pliku. W przeciwnym razie nie znajdziesz pliku.

3. Twój projekt lokalny to nic nowego, co można przesunąć. Proszę

git init

git remote add origin +"githublink"

git add .

git commit -m "" idź ponownie.

4. następnie git pull origin master(klawisz)

5. Wreszcie git push origin master(rozwiąż wszystkie problemy).

http://my.oschina.net/psuyun/blog/123005参考 链接


0

Jeśli próbujesz przekazać kod bezpośrednio do gałęzi głównej, użyj polecenia

git push origin master

To pomaga mi.


0

Dostałem również ten sam błąd. Myślę, że to dlatego, że go sklonowałem i próbuję odpchnąć. $ git push -u origin master To jest właściwe polecenie. Spróbuj tego

Liczenie obiektów: 8, gotowe. Kompresja delta z wykorzystaniem maksymalnie 2 wątków. Kompresowanie obiektów: 100% (4/4), gotowe. Zapisywanie obiektów: 100% (8/8), 691 bajtów | 46,00 KiB / s, gotowe. Łącznie 8 (delta 1), ponownie wykorzystane 0 (delta 0) zdalne: Rozwiązywanie delt: 100% (1/1), gotowe.

  • [new branch] master -> master Master oddziału skonfigurowany do śledzenia zdalnego oddziału master od początku.

    It was successful. Try to create new u branch 
    

0

Miałem ten sam problem, ponieważ zapomniałem podać gałąź

git push myorigin feature/23082018_my-feature_eb

0

Dla mnie przesuwałem zmiany do prywatnego repozytorium, do którego nie miałem dostępu do zapisu. Upewnij się, że masz ważne prawa dostępu podczas wykonywania operacji push lub pull.

Możesz bezpośrednio zweryfikować za pośrednictwem


1
„Weryfikuj bezpośrednio za pomocą”, co?
Mike Poole,

0

Dla mnie to dlatego, że usunąłem ukryty folder .git .

Naprawiłem to, usuwając folder, ponownie klonując i ponownie wprowadzając zmiany.


0

Jeśli jesteś w dowolnym oddziale, możesz użyć tego:

git push origin head -u

Spowoduje to automatyczne utworzenie nowej gałęzi o tej samej nazwie na pilocie.


-1

Aby rozwiązać ten problem, podczas sprawdzania samego kodu git, musisz wydać polecenie jak poniżej:

git checkout -b branchname origin/branchname

Tutaj domyślnie ustawiamy the upstream branch, więc nie będziesz mieć do czynienia ze wspomnianym problemem.


-2

Dla mnie problem pochodzi od nazwy mojego oddziału: „# name-of-my-branch”, bez „#” działa dobrze!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.