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


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.


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.


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.


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.


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.


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

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


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://User_name@bitbucket.org/User_name/sample.git

    ( Powyższy adres URL https: //User_name@bitbucket.org/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 "you@example.com"
git config --global user.name "Your Name"

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.


4

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


4

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


3

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


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.


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

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

2

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

git add .

git commit -m "your msg"


2

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


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

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 ...


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.


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!



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://username@bitbucket.org/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 loopback-utils@0.8.3 does not satisfy loopback-utils@^0.9.0

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


1

Zrób to

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

Miłego kodowania!


1

Wypróbuj to polecenie git,

git push origin master –f
git push origin master --force

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

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.


0

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


0

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


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.

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.