Problem z wypychaniem nowego kodu w Github

146

Utworzyłem nowe repozytorium na Github, które ma teraz tylko plik Readme.md.

Mam nowo utworzony projekt RoR, który chciałem przesłać do tego repozytorium. Poniżej znajdują się polecenia, które wydałem w moim terminalu, aby wykonać to wraz z błędem, który otrzymuję.

git remote add origin https://github.com/aniruddhabarapatre/learn-rails.git

Po czym wpisałem swoją nazwę użytkownika i hasło

git push -u origin master

Błąd ---

To https://github.com/aniruddhabarapatre/learn-rails.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/aniruddhabarapatre/learn-rails.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first merge the remote changes (e.g.,
hint: 'git pull') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Po raz pierwszy wypycham kod do repozytorium Github i zgubiłem się z błędami. Przeszukałem kilka innych pytań, które są tutaj zadawane, ale żadne z nich nie miało problemów za pierwszym razem.

Aniruddha
źródło

Odpowiedzi:

168

Kiedy tworzyłeś repozytorium na GitHub , utworzyłeś README.md , który jest nowym zatwierdzeniem .

Twoje lokalne repozytorium jeszcze nie wie o tym zatwierdzeniu. W związku z tym:

Aktualizacje zostały odrzucone, ponieważ pilot zawiera pracę, której nie masz lokalnie.

Możesz skorzystać z tej porady:

Możesz najpierw scalić zdalne zmiany (np. „ git pull”) Przed ponownym naciśnięciem.

To jest:

git pull
# Fix any merge conflicts, if you have a `README.md` locally
git push -u origin master
Johnsyweb
źródło
3
To, co robię, to najpierw git pull origin master, a następnie ponownie.
Bagusflyer,
14
w niektórych przypadkach możesz otrzymać fatal: refusing to merge unrelated historiesw takim przypadku, przesyłasz, git pull --allow-unrelated-histories origin mastera następnie
wciskasz
1
Nie działa dla mnie. zdalny: Push odrzucony. zdalny: zdalny: refs / heads / master: ...: oczekiwana nazwa nadawcy xxx, ale odnaleziono yyy. Robię konfigurację git --global user.email yyy i nadal nie rozpoznaje. Nie można niczego wymusić. !!!
Baruch Atta
283

Jeśli jest to Twoje pierwsze naciśnięcie, możesz nie przejmować się historią na pilocie. Następnie możesz wykonać „wymuszone wypychanie”, aby pominąć sprawdzanie, które robi git, aby zapobiec nadpisaniu istniejącej lub innej pracy na zdalnym. Używaj z najwyższą ostrożnością!

po prostu zmień

git push **-u** origin master

zmień to w ten sposób!

git push -f origin master
Van Mart
źródło
5
Spowoduje to usunięcie mojego pliku readme, który najpierw umieściłem na github. Teraz wygląda na to, że muszę to powtórzyć.
puste gniazdo jack
3
możesz po prostu dodać ostrzeżenie, że -f wymusza push i może zepsuć oś czasu kodu
ericksho
To jest zły sposób, spowodowało mi to problem, usunęło plik readme, który nie został stworzony przeze mnie, teraz muszę zadzwonić do opiekuna, powiedzieć mu, że jestem głupi, przepraszam, stwórz ponownie odczyt. :(
Mohammad Elsayed
63

⚡️ ŁATWE: Wszystko, czego potrzebujesz, to wymuszone pchnięcie. Ponieważ być może utworzyłeś readme.mdplik na Githubie i jeszcze go nie ściągnąłeś.

git push -f origin master

A oto GIF.

git push -f wzorzec pochodzenia

⚠️ UWAGA : Korzystanie forcemoże zmienić historię dla innych ludzi w tym samym projekcie. Zasadniczo, jeśli nie zależy Ci na usunięciu pliku dla wszystkich, po prostu śmiało. Zwłaszcza jeśli jesteś jedynym deweloperem w tym projekcie.

Ahmad Awais
źródło
1
Zwróć uwagę, że to podejście zmienia historię, którą inni użytkownicy tego repozytorium już pobrali. git push -f origin masterkształtowanie się nie jest wielkim nawykiem.
Johnsyweb
1
To rozwiązanie może rozwiązać wypychanie zatwierdzeń, ale także usuwa wszystkie poprzednie zatwierdzenia !.
twenk11k
2
Uważaj na github noobs ... Jeśli utworzyłeś plik Readme.md za pośrednictwem GitHub, to polecenie USUNIE JĄ, ponieważ wypycha nowe zmiany.
daCoda
Głównie dlatego tu lądują ludzie. -ftag usuwa pliki i powinien być używany ostrożnie.
Ahmad Awais
34

Wydaj wymuszone pchnięcie poleceniem:

git push -f origin master
Samarth Shah
źródło
10
Pamiętaj, że może to usunąć poprzednie zatwierdzenia, co może być pożądane lub nie
Crashalot,
8

Zakładając, że dodałeś plik Readme.md za pośrednictwem interfejsu udostępnionego przez github, plik Readme nie znajduje się jeszcze w Twoim folderze lokalnym. Dlatego przy próbie wypchnięcia do zdalnego repozytorium pojawia się błąd, ponieważ w lokalnym repozytorium brakuje pliku readme - że tak powiem, jest to „spóźnione”. Dlatego, jak jest sugerowane w komunikacie o błędzie, spróbuj najpierw „git pull”. Spowoduje to pobranie pliku readme ze zdalnego repozytorium i połączenie go z katalogiem lokalnym. Po tym nie powinieneś mieć problemu z wypychaniem do zdalnego repozytorium (wysłane przez Ciebie polecenia wyglądają na prawidłowe).

Quercus
źródło
7

Dzieje się tak, gdy początkowo próbujesz push, ponieważ w repozytorium GitHub masz readMe.md lub inną nową rzecz, której nie ma w lokalnym repozytorium. Najpierw musisz scalić niepowiązaną historię swojego repozytorium github, aby to zrobić

git pull origin master --allow-unrelated-histories

następnie możesz pobrać inne pliki z repozytorium (readMe.md lub inne) za pomocą tego

git pull origin master

Po tym

git push -u origin master

Teraz z powodzeniem wprowadzasz wszystkie zmiany do repozytorium Github. Nie jestem ekspertem w git, ale za każdym razem ten krok działa dla mnie.

Chathuranga
źródło
5

Biorąc pod uwagę, że od jakiegoś czasu nie wprowadzałeś zmian, może to zadziała.

git add files
git commit -m "Your Commit"
git push -u origin master

To zadziałało dla mnie, mam nadzieję, że zadziała również dla ciebie.

Rob Mcelvenny
źródło
4

Ten błąd występuje, gdy przesyłasz dane z katalogu lokalnego do zdalnego repozytorium git za pomocą polecenia git: git push -u origin master

Ponieważ pliki katalogu lokalnego i zdalnego katalogu git są w konflikcie.

Rozwiązanie :

Po zatwierdzeniu wszystkich plików do przemieszczania wykonaj poniższe kroki.

  1. Pobierz pliki ze zdalnego repozytorium jako konflikt z lokalnym katalogiem roboczym.

    • git pull <remoter-url> <branch-name>
  2. Zatwierdź zmiany ponownie.

    • git add -A
    • git commit -m ‘<comment>'
  3. Po zatwierdzeniu scalania plików z obu katalogów możesz użyć

    • git push -u origin master

To rozwiąże problem. Dzięki.

Ravi
źródło
3

jeśli używasz git for mac w GUI, możesz najpierw wybrać Respository-> Pull lub „comm + shift + p” do „git pull”, a następnie opublikować źródło.

zheng fuchao
źródło
1

Miałem podobny problem ... rozwiązałem go w ten sposób (nie jestem ekspertem od git, więc nie wiem, czy to jest dobre rozwiązanie, ale zadziałało):

git pull origin master --allow-unrelated-histories
git merge origin origin/master
git rm README.md
git commit -m 'removed readme.md'
git push origin master
Marco Caggiano
źródło
0

Zmagałem się z tym błędem przez ponad godzinę! Oto, co pomogło mi rozwiązać ten problem. Wszystko to, gdy mój katalog roboczy był repozytorium, które sklonowałem w moim systemie.

Jeśli dodajesz pliki do istniejącego repozytorium ** 1. Wyciągnąłem wszystko, co dodałem do mojego repozytorium, do mojego folderu GitHub:

git pull


Wynik był - jakiś plik readme plik1 plik2

  1. Skopiowałem (przeciągnij i upuść) moje nowe pliki (pliki, które chciałem wypchnąć) do mojego sklonowanego repozytorium (repozytorium GitHub). Po uzyskaniu tego repozytorium powinieneś zobaczyć swoje stare i nowe pliki.

na przykład. jakiś plik readme plik1 plik2 nowy plik1 nowy plik2

  1. git dodaje „nowy plik1” „nowy plik2”

  2. [opcjonalny] status git zapewni ci to, czy pliki, które chcesz dodać, są ustawione poprawnie lub nie zostały wyprowadzone


W Twoim oddziale Twój oddział jest na bieżąco z 'origin / master'. Zmiany do zatwierdzenia: (użyj polecenia „git reset HEAD ...”, aby usunąć ze sceny)

    new file:   newfile1
    new file:   newfile2

5.git commit -m "dowolny opis, który chcesz podać" 6. git push

A wszystkie moje nowe pliki wraz ze starszymi były widoczne w moim repozytorium.

Potatojaisiladki
źródło
0

Prostszą odpowiedzią jest ręczne przesłanie pliku README.MD z komputera do GitHub. U mnie zadziałało bardzo dobrze.

Bogdan Doicin
źródło
0

Używam opcji Branches, a następnie klikam prawym przyciskiem myszy folder „remote / origin”, a następnie klikam „delete branches from remote”, patrz obrazek poniżej:

Obraz

Kevin Anderson Gomes Cabral
źródło
0

Otrzymałem ten błąd w usłudze Azure Git, a to rozwiązuje problem:

git fetch
git pull
git push --no-verify
canmustu
źródło