błąd git: nie udało się wypchnąć niektórych referencji do zdalnego

450

Z jakiegoś powodu nie mogę teraz naciskać, podczas gdy mógłbym to zrobić wczoraj. Może popełniłem błąd przy konfiguracji lub coś takiego.

Oto co się dzieje:

Kiedy używam git push master master

gitbashscr

Jak wygląda mój katalog roboczy i zdalne repozytorium:

Zrzut ekranu folderu plików systemu Windows z następującymi katalogami: .git, css, js.  I te pliki: index.php, readme, setsu.php.  Słowo „lokalny” ze strzałką wskazuje folder css.  Poniżej zrzut ekranu z nagłówkiem „github” oraz folder css i plik index.php

leipzy
źródło
7
wygląda na to, że Twoje lokalne repozytorium nie jest zsynchronizowane z repozytorium git. próbowałeś zrobić Git Pull?
R11G
1
tak, ale nie mam pojęcia z następującą składnią po git pull mówi git pull <remote> <branch>, czy możesz pozwolić mi zobaczyć przykładową składnię git pull?
leipzy
1
Sprawdź to podobne pytanie - stackoverflow.com/questions/18588974/…
R11G
3
@ R11G dziękuję panu! ten link pomógł mi stackoverflow.com/a/18589043/3626672
leipzy
2
Wystąpił ten błąd w nowym repozytorium. Pomogło to: stackoverflow.com/a/6518774/2067690
HumanInDisguise

Odpowiedzi:

619

Jeśli w repozytorium GitHub pojawiły się nowe zatwierdzenia, podczas gdy pracujesz lokalnie, radzę użyć:

git pull --rebase
git push

Pełna składnia to:

git pull --rebase origin master
git push origin master

Z Git 2.6+ (wrzesień 2015), po zrobieniu tego (raz)

git config --global pull.rebase true
git config --global rebase.autoStash true

Wystarczyłoby proste git pull.
(Uwaga: z Git 2.27 Q2 2020 , A merge.autostashjest także dostępna dla zwykłego naciągu, bez rebase)

W ten sposób, byś odtworzyć (w --rebaseczęści) zobowiązuje lokalnych na szczycie nowo zaktualizowane origin/master(albo origin/yourBranch: git pull origin yourBranch).

Zobacz pełniejszy przykład w rozdziale 6 Pull with rebase of Git Pocket Book .

Poleciłbym:

# add and commit first
git push -u origin master

Ustanowiłoby to relację śledzenia między lokalnym oddziałem głównym a jego odgałęzieniem.
Następnie wszelkie przyszłe działania wypychające dla tej gałęzi można wykonać za pomocą prostego:

git push

Zobacz „ Dlaczego muszę jawnie wcisnąć nowy oddział? ”.


Skoro PO już reset i przerobione jego popełnienia na górze origin/master:

git reset --mixed origin/master
git add .
git commit -m "This is a new commit for what I originally planned to be amended"
git push origin master

Nie ma takiej potrzeby pull --rebase.

Uwaga: git reset --mixed origin/mastermożna również napisać git reset origin/master, ponieważ --mixedopcja jest domyślna podczas korzystania git reset.

VonC
źródło
czy można wykonać sugerowane polecenie git pull --rebase ...? bo już to zrobiłem> git reset --mixed origin / master> git add. > git commit -m "To jest nowe zatwierdzenie dla tego, co pierwotnie planowałem być poprawką"> git push master master zaproponował tutaj stackoverflow.com/questions/18588974/... btw twoja odpowiedź jest pomocna proszę pana
leipzy
3
Dla mnie wystarczyło uruchomić „git commit”. :(
Tyler
Dzięki, naprawiłem głupi problem z Git LFS, zrezygnowałem z konieczności używania wiersza poleceń odtąd haha.
Tyler C
2
Naprawdę super ... poniższe polecenia działały dla mnie ... git reset - mixed origin / master git add. git commit -m „To jest nowe zatwierdzenie tego, co pierwotnie planowałem zmienić” git push origin master Dziękuję @VonC
Hari Narayanan
1
Dzięki, działa! Szukałem godzin dla tego rozwiązania!
Redion Xhepa
96

Czy ktoś próbował:

git push -f origin master

To powinno rozwiązać problem.

EDYCJA: W oparciu o komentarz @Mehdi poniżej muszę coś wyjaśnić —force pushing. Powyższe polecenie git działa bezpiecznie tylko dla pierwszego zatwierdzenia. Jeśli poprzednio były już zatwierdzenia, żądania ściągania lub gałęzie, resetuje to wszystko i ustawia od zera. Jeśli tak, zapoznaj się ze szczegółową odpowiedzią @VonC, aby uzyskać lepsze rozwiązanie.

cagcak
źródło
25
Działa, ale źle, nie używaj go, chyba że wiesz, co robisz. (prawdopodobnie nie wiesz, co robisz, jeśli patrzysz na SO)
Mehdi
3
Jeśli masz zamiar spróbować -f/ --forcezawsze zawsze jest bezpieczniej używać --force-with-leasetego, co zostanie przerwane, jeśli pojawią się zmiany, które zostałyby zablokowane przez wypychanie. --force-with-leasejest wymagany w wielu codziennych sytuacjach bazowania, ale --forceprawie nigdy nie powinien być potrzebny.
Joshua Goldberg
63

Jeśli po prostu użyłeś git initi dodałeś swoje pliki git add .lub coś podobnego i dodałeś zdalną gałąź, być może nie popełniłeś ( git commit -m 'commit message') niczego lokalnie, aby pchnąć do zdalnego ... Właśnie miałem ten błąd i to był mój kwestia.

ironcladmvtm
źródło
1
właśnie na to wpadłem. Polecenie Commit nie działało podczas dodawania git. dobra decyzja. Dzięki
napisałem
1
Dzięki stary! Otóż ​​to. Myślałem, że dokonałem zmian. Teraz master git push -u origin działa dobrze.
tleo
36

Miałem ten sam problem. Otrzymywałem ten problem, ponieważ nie dokonałem żadnego zatwierdzenia, nawet początkowego, i wciąż próbowałem je popchnąć.

Raz to zrobiłem, git commit -m "your msg"a potem wszystko działało dobrze.

ppmakeitcount
źródło
8
To nie ma większego sensu. Pierwotne pytanie dotyczy tego, czy lokalny git jest w tyle . W żaden sposób nie można rozwiązać problemu „pozostania w tyle”, ponieważ dokonałem lokalnego zatwierdzenia!
GhostCat
Och, zapomniałem też popełnić: p
Shams Nahid
Jest to również możliwe, że nie pozwoli ci naciskać pustego zatwierdzenia
mboy
3
Właśnie miałem ten problem i zapomniałem popełnić. Komunikat o błędzie powinien być wyraźniejszy
Ivan Topić
1
Dotyczy to mnie, ponieważ otrzymywałem dokładnie ten komunikat o błędzie, a to rozwiązanie rozwiązało mój problem.
Diego Fortes
19

Zmień nazwę swojego oddziału, a następnie wypchnij, np .:

git branch -m new-name
git push -u new-name

To zadziałało dla mnie.

p8ul
źródło
1
zadziałało, ale proszę wyjaśnij, dlaczego powinniśmy to zrobić
kanlukasz,
Wow, to faktycznie działało, ale dlaczego? Miałem myślnik w moim lokalnym nazwy oddziału: my-branch_wont_push. Raz zmieniłem nazwę na my_branch_wont_push, a potem git push -u origin my_branch_wont_pushpracowałem dla mnie.
cdabel
13

Rozwiązanie tego problemu znajduję w pomocy github.

Można to zobaczyć na stronie: Radzenie sobie z błędami niezwiązanymi z szybkim przewijaniem do przodu

To mówi:

Możesz to naprawić, pobierając i scalając zmiany wprowadzone w zdalnej gałęzi ze zmianami, które wprowadziłeś lokalnie:

$ git fetch origin
# Fetches updates made to an online repository
$ git merge origin branch
# Merges updates made online with your local work

Lub możesz po prostu użyć git pull, aby wykonać oba polecenia jednocześnie:

$ git pull origin branch
# Grabs online updates and merges them with your local work
Sealter
źródło
1
Jest to normalny proces, ilekroć wszystko działa zgodnie z oczekiwaniami. Nic nie pomaga, gdy git uważa, że ​​jest już aktualne, jak pytał @rubyandcoffee.
Tim
10
  1. git init

  2. git remote add origin https://gitlab.com/crew-chief-systems/bot

  3. git remote -v (do sprawdzania bieżącego repozytorium)

  4. git add -A(dodaj wszystkie pliki)

  5. git commit -m 'Added my project'

  6. git pull --rebase origin master

  7. git push origin master

James Siva
źródło
przed wypchnięciem kodu należy pobrać z repozytorium
James Siva,
możesz po prostu pisać jak git pull
James Siva,
6

Napotkałem ten sam problem, rozwiązany za pomocą poniższych kroków.

  1. git init
  2. git add .
  3. git commit -m 'Add your commit message'
  4. git remote add origin https://[email protected]/User_name/sample.git

    ( Powyższy adres URL https: //[email protected]/User_name/sample.git odnosi się do adresu URL twojego projektu wiadra bitów)

  5. git push -u origin master

Wskazówka

sprawdź, czy twoje konto git hub łączy się z lokalnym gitem, używając:

git config --global user.email "[email protected]"
git config --global user.name "Your Name"
Divya
źródło
4

Jeśli używasz gerrit, może to być spowodowane niewłaściwym identyfikatorem zmiany w zatwierdzeniu. Spróbuj usunąć identyfikator zmiany i zobacz, co się stanie.

Jim Sime
źródło
4

Pamiętaj, aby zatwierdzić zmiany przed przejściem do repozytorium Github. To może rozwiązać problem.

Alf Moh
źródło
4

Problemem nie jest również zatwierdzanie początkowych zmian przed wypchnięciem

Pazur
źródło
3

przed wypychaniem musisz dodać i zatwierdzić zmiany lub zrobić git push -f origin master

Kinnera Reddy
źródło
3
git push origin {your_local_branch}:{your_remote_branch}

Jeśli oddział lokalny i oddział zdalny mają tę samą nazwę, możesz pominąć nazwę oddziału lokalnego, po prostu użyj git push {your_remote_branch}. W przeciwnym razie wygeneruje ten błąd.

Yitong Feng
źródło
3

Wykonałem następujące kroki i zadziałało to dla mnie.

 rm -rf .git
 git init
 git add .
 git commit -m"first message"
 git remote add origin "LINK"
 git push -u origin master
ASHISH RANJAN
źródło
2

Może się to zdarzyć, gdy nie masz żadnych plików. Spróbuj utworzyć plik tekstowy, a następnie postępuj zgodnie z następującymi poleceniami

git add .
git commit -m "first commit"
git push --set-upstream origin master
sushil suthar
źródło
2

Dla mnie problemem było to, że nie dodałem plików przed zatwierdzeniem.

git add .

git commit -m "your msg"

Rohitsam
źródło
2

Najlepsze wykorzystanie, rm -rf .git/hooksa następnie spróbuj git push

Binod Singh
źródło
Co ciekawe, pomogło mi to w przypadku, w którym wyraźnie nie było żadnych zobowiązań dotyczących pochodzenia (nie trzeba bazować).
pevik
Dlaczego miałbyś wyrzucać wszystkie swoje haki? może najpierw zrobić kopię zapasową?
MSpreij
2

W GitHub utworzyłem puste repozytorium i mam swój kod lokalnie. Napotkałem ten sam problem, postępując zgodnie z poniższą sekwencją,

git init
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git add .
git push -u origin master

PROBLEM BYŁ: Próbowałem zatwierdzić przed umieszczeniem plików, które posiadam.

POTRZEBUJEMY ZAPAMIĘTOWAĆ PLIKI, A NASTĘPNIE ZAANGAŻOWAĆ.

To jest poprawna sekwencja.

git init
git add .
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git push -u origin master

Ponieważ najpierw wykonuję nieprawidłową sekwencję, po prostu wykonuję poniższe polecenia

git add .
git commit -m 'Initial Commit'
git push -u origin master
Kavin Raju S.
źródło
1

Nie jestem pewien, czy to dotyczy, ale dla mnie poprawką było zatwierdzenie czegoś lokalnie po git init. Potem nacisnąłem na zdalne używając --set-upstream ...

użytkownik1889992
źródło
1

Utworzenie nowej gałęzi rozwiązanej dla mnie:

git checkout -b <nameOfNewBranch>

Zgodnie z oczekiwaniami nie ma potrzeby łączenia, ponieważ poprzedni oddział został w pełni zawarty w nowym.

Santiago M. Quintero
źródło
1
Miałem dokładnie ten problem, byłem na Feature22 i robiłem git push origin feature22-fix, ale feature22-fixnie wyszedłem ani lokalnie, ani zdalnie, więc musiałem najpierw sprawdzić lokalnie oddział, a następnie pchnąć
Honey
1

Jeśli próbujesz zainicjować katalog z istniejącym repozytorium GitHub, upewnij się, że dokonujesz zmian.

Spróbuj utworzyć plik:

touch initial
git add initial
git commit -m "initial commit"
git push -u origin master

Spowoduje to umieszczenie pliku o nazwie początkowej, który można usunąć później.

Mam nadzieję, że ta odpowiedź pomoże! Powodzenia!

Andreas Bigger
źródło
1

Musisz dać siłę

Po prostu wykonaj push - force.

Ankit
źródło
1

W moim przypadku to moja huskypaczka nie zezwala na wypychanie.

> husky - pre-push hook failed (add --no-verify to bypass)
> husky - to debug, use 'npm run prepush'
error: failed to push some refs to 'https://[email protected]/username/my-api.git'

Aby mocno naciskać, po prostu biegnij git push origin master --no-verify

Pobiegłem npm run prepushzobaczyć błąd debugowania, a to była przyczyna:

npm ERR! code ELOCKVERIFY
npm ERR! Errors were found in your npm-shrinkwrap.json, run  npm install  to fix them.
npm ERR!     Invalid: lock file's [email protected] does not satisfy loopback-utils@^0.9.0

Uruchomiłem go npm installi zatwierdziłem, a problem został rozwiązany.

Jee Mok
źródło
1

Zrób to

git rm --cached *
git add .
git commit -m"upload"
git push --set-upstream origin master

Miłego kodowania!

Do Nhu Vy
źródło
1

Wypróbuj to polecenie git,

git push origin master –f
git push origin master --force
Zin Myo Swe
źródło
0

Cóż, jeśli żadna z powyższych odpowiedzi nie działa i jeśli ssh-addostatnio coś popsułeś. Próbować

ssh-add -D
Abhisek
źródło
0

Dla użytkowników sourcetree

Najpierw wykonaj wstępne zatwierdzenie lub upewnij się, że nie ma żadnych nieprzewidzianych zmian, a następnie po stronie sourcetree znajduje się „PILOTY”, kliknij go prawym przyciskiem myszy, a następnie kliknij „Push to origin”. Proszę bardzo.

Bowie Chang
źródło
0

Zdarza mi się to, ponieważ miałem tag z tym samym co gałąź i próbowałem wypchnąć gałąź na odległość.

Buminda
źródło
0

W moim przypadku problem polegał na tym, że (o dziwo) nie było gałęzi zwanej master. Wziąłem repozytorium z Github.

D063520
źródło
0

Naciskałem istniejącą gałąź literówki „evelop”, której jeszcze nie miałem kasy, i zamiast tego chciałem przesunąć gałąź zwaną „kopertą”. Więc oddział musi istnieć / sprawdzić w lokalnej kopii roboczej, aby oczywiście popchnąć, a zatem ten błąd, a nie literówka.

FentomX1
źródło