Jestem nowy w GitHub . Dzisiaj spotkałem się z pewnym problemem, gdy próbowałem przekazać mój kod do GitHub.
Pushing to [email protected]:519ebayproject/519ebayproject.git
To [email protected]:519ebayproject/519ebayproject.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Jeszcze nic nie wypchnąłem do repozytorium, więc dlaczego muszę coś wyciągać?
Odpowiedzi:
Jeśli nie chcesz scalać gałęzi zdalnej z gałęzią lokalną (zobacz różnice w git diff ) i chcesz wykonać wymuszone wypychanie, użyj polecenia push za pomocą opcji -f
gdzie
origin
jest nazwa twojego zdalnego repo.źródło
$ git pull origin master -v
ale daje błądfatal: refusing to merge unrelated histories
. Potem spróbowałem i zadziałało, a moje lokalne pliki pojawiły się na zdalnym repozytorium github.Jak mówi wiadomość,
Użyj,
git pull
aby pobrać najnowsze zmiany ze zdalnego repozytorium do lokalnego repozytorium. W takim przypadku ciągnięcie zmian będzie wymagało scalenia, ponieważ dokonano zmian w lokalnym repozytorium.Podam przykład i zdjęcie do wyjaśnienia. Załóżmy, że twoje ostatnie pobranie z początku / oddziału miało miejsce w Commit B. Ukończyłeś i popełniłeś trochę pracy (Commit C). W tym samym czasie ktoś inny zakończył pracę i przekazał ją do źródła / oddziału (Commit D). Konieczne będzie połączenie tych dwóch gałęzi.
Ponieważ jesteś tym, który chce pchać, Git zmusza cię do wykonania scalenia. Aby to zrobić, musisz najpierw pobrać zmiany z początku / gałęzi.
Po zakończeniu scalania będzie można teraz przewijać pochodzenie / oddział do Commit E, naciskając zmiany.
Git wymaga, abyś sam przeprowadzał scalanie, ponieważ scalanie może prowadzić do konfliktów.
źródło
git pull
również drukowaneAlready up-to-date
. Okazało się, że nie byłem w oddziale, choć tak było, ale oderwany oddział HEAD (być może z powodu nieudanego scalenia?). Było to oczywiste po uruchomieniugit branch
. Po uruchomieniugit checkout mybranch
wszystko działało zgodnie z oczekiwaniami.Czy zaktualizowałeś kod przed wypchnięciem?
Użyj
git pull origin master
zanim cokolwiek pchniesz.Zakładam, że używasz
origin
nazwy pilota.Musisz wyciągnąć przed wypchnięciem, aby Twoje lokalne repozytorium było aktualne przed wypchnięciem czegoś (na wypadek, gdyby ktoś już zaktualizował kod
github.com
). Pomaga to w rozwiązywaniu konfliktów lokalnie.źródło
git pull origin master
git narzeka, że'origin' does not appear to be a git repository
git remote --verbose
aby zobaczyć wszystkie piloty skonfigurowane w folderze git. Informacje wyświetlane na ekranie będą również zawierać ścieżki „[email protected]” lub ścieżki HTTPS, z których powinieneś być w stanie określić, gdzie należy pchać. Mam nadzieję że to pomoże !git pull origin master
pokazywanie Już aktualny. ale potem, gdy spróbujesz wcisnąć origin_branch, powiedz to samo ostrzeżenie wspomniane w pytaniu. Jakieś sugestie !!git push -f <remote> <branch>
np. git push origin <twoja_lokalna_granica> sprawdź ten wątek .Zwykle dzieje się tak, gdy ty
git commit
i próbujeszgit push
zmienić wcześniejgit pulling
w tej gałęzi, wx
której ktoś już dokonał zmian.Normalny przepływ byłby jak poniżej,
KROK 1 :
git stash
Twoje lokalne niezatwierdzone zmiany w tym oddziale.KROK 2 :
git pull origin branch_name -v
dopull and merge
(lokalnie popełnione zmian na tym oddziale . Dać efekt scalenia jakąś wiadomość, a konflikty fix jeśli występują )KROK 3 :
git stash pop
testash
zmiany ED ( Potem można zrobić rewizje na plikach pojawiło jeśli chcesz lub pchania już popełnił zmiany (Krok 4) imię i zrobić nowy zobowiązać do plików później. )KROK 4 :
git push origin branch_name -v
scalone zmiany.Wymień
branch_name
sięmaster
(namaster
oddziale).źródło
commit
? Czy nie powinieneś później zatwierdzać swoich zmianstash pop
?Pierwsze i proste rozwiązanie (niezalecane)
git push -f origin master
.Zalecane rozwiązanie
Jeśli to nie zadziała, wykonaj 🔰
.git
katalog z folderu.Następnie wykonaj następujące polecenia:
LUB
Jedynym zastosowaniem
git push -f origin master
jeśli-u
nie działa dla Ciebie.To rozwiąże prawie każdy rodzaj błędów występujących podczas wypychania plików.
źródło
Czasami zapomnieliśmy o ciągnięciu i wykonaliśmy wiele prac w lokalnym środowisku.
Jeśli ktoś chce pchać bez ciągnięcia,
działa. Nie jest to zalecane podczas pracy z innymi ludźmi, ale jeśli twoja praca jest prostą rzeczą lub osobistym projektem zabawki, będzie to szybkie rozwiązanie.
źródło
reset --hard
wersję starszego zatwierdzenia, a potem zrobiłem kilka innych. Potem po prostu chciałem,push
ale zdalne repo nie było przygotowane, aby mi na to pozwolić. WarrenP mógłby w rzeczywistości pomóc uczniom zdobyć mniej runiczny charakter. Może nie chce.Niektórzy z was mogą mieć ten błąd, ponieważ Git nie wie, którą gałąź próbujesz wcisnąć.
Jeśli Twój komunikat o błędzie zawiera również
to możesz skorzystać z przydatnych wskazówek Jima Kubicka, Skonfiguruj Git, aby działał tylko w trybie Push Current Branch , aby ustawić domyślną gałąź na current.
źródło
To zadziałało dla mnie - komenda
git pull origin branch_name --rebase
najpierw pobierze zmiany ze zdalnej gałęzi, a następnie narebase
bieżącej gałęzi.źródło
Oprócz powyższych odpowiedzi, dla mnie działały: -
Scenariusz -
Rozwiązanie -
źródło
--all
flagi.Miałem ten sam problem, ale najpierw popchnąłem go siłą, używając tego
Zrobiłem to po tym, jak zatwierdziłem pliki i otrzymywałem błąd tak jak ty. Zatwierdziłem wszystkie pliki i popchnąłem je. Następnym razem naciskałem na github. Zrobiłem to, o co mnie prosił i wtedy było w porządku. Mam nadzieję, że to też dla ciebie działa :)
źródło
git push --set-upstream origin master --force
Wspomniałem o tym w moim tutorialu, jak korzystać z GitHub: tutorial dla początkujących .
Podczas tworzenia nowego repozytorium w GitHub, GitHub może poprosić o utworzenie pliku readme. Jeśli utworzysz plik readme bezpośrednio w GitHub, musisz najpierw złożyć żądanie „pull”, zanim żądanie „push” zakończy się powodzeniem. Te polecenia „wyciągną” zdalne repozytorium, połączą je z bieżącymi plikami, a następnie „wypchną” wszystkie pliki z powrotem do GitHub:
źródło
Otrzymałem wyżej wymieniony komunikat o błędzie, gdy próbowałem wcisnąć mój aktualny oddział
foobar
:Okazuje się, że miałem dwa oddziały lokalne śledzące ten sam oddział zdalny:
Udało mi się przesunąć moją obecną gałąź za pomocą:
... i sprzątać za pomocą
git branch -d
źródło
git push -f origin nazwa gałęzi
Użyj powyższego polecenia tylko wtedy, gdy masz pewność, że nie potrzebujesz zdalnego kodu oddziału, w przeciwnym razie najpierw scal, a następnie wypchnij kod
źródło
Jeśli nie chcesz angażować się w bieżący projekt (i potencjalnie masz do czynienia z konfliktami scalania, których nie chcesz rozwiązać) i nie chcesz tworzyć innej gałęzi (zarządzanie innym oddziałem będzie uciążliwe), a nie nie chcę robić ryzykownego i stałego git
force
poleceń (które nawet po przeczytaniu tego, co robią, często jestem zaskoczony implikacjami zrobienia tego).Rozwiązanie : możesz po prostu przeciągnąć zawartość folderu do innego folderu, przeciągnąć projekt do teraz pustego folderu, przeciągnąć wyciągniętą zawartość do kosza, a następnie przeciągnąć prawidłowy projekt z powrotem do folderu. Powinieneś być w stanie prawidłowo naciskać i uzyskiwać pożądane wyniki. Zajmuje mi to dosłownie mniej niż 10 sekund.
Ludziom, którzy powiedzieliby mi, że nie jest to właściwe, nie powołując się na jakiekolwiek konsekwencje, lub ludzi, którzy mówią mi, żebym użył polecenia, które wywołują u mnie przyszłe niedogodności, mówię: „Ta metoda dosłownie zajmuje mi mniej niż 10 sekund”. Jeśli napotkam polecenie git, którego wdrożenie zajmuje mniej niż 10 sekund i ma dokładnie taki sam efekt, przyjmuję to. Do tego czasu używam tej metody.
Wadą tej metody jest to, że historia zatwierdzeń będzie wyglądać liniowo, gdy faktycznie połączysz się w gałęzi bez udokumentowania scalenia. To może nie być najlepsza metoda podczas pracy z grupami. W takich przypadkach pracuj nad oddziałami!
źródło
Po prostu miałem ten sam problem, ale w moim przypadku wpisałem niewłaściwą gałąź na pilocie. Wygląda więc na to, że jest to inne źródło tego problemu ... dokładnie sprawdź, czy naciskasz na właściwą gałąź.
źródło
Doświadczyłem tego samego problemu i okazało się, że jestem w innym (lokalnym) oddziale, niż myślałem, że jestem ORAZ poprawny lokalny oddział był opóźniony w zatwierdzeniach ze zdalnego.
Moje rozwiązanie: sprawdź poprawną gałąź, wybierz zatwierdzenie z innej gałęzi lokalnej, git pull i git push
źródło
Miałem podobny problem i okazało się, że mój przepływ pracy związany z aktualizacją mojego oddziału był winy. Robiłem następujące:
W moim lokalnym „mistrzu”
potem z powrotem w moim lokalnym oddziale
Działa to dobrze w przypadku poprzedniego przepływu git, ale nie w przypadku github.
git rebase
Tu problem, powodując problemy z synchronizacją (i muszę przyznać, że coś miałem przyjąć bez pełnego zrozumienia) i niestety umieścić mnie w miejscu, gdziegit push -f
stał prawdopodobnie najłatwiejszym rozwiązaniem. Niedobrze.Mój nowy przepływ polega na bezpośredniej aktualizacji gałęzi, wykonując
git merge
następujące czynności:W moim lokalnym oddziale
Nie ma szybkiego przewijania do przodu, ponieważ dokonam oczywiście zmian w lokalnym oddziale.
Jak zapewne wiesz, nie jestem ekspertem od git, ale jestem rzetelnie informowany, że ten przepływ pracy prawdopodobnie pozwoli uniknąć konkretnych problemów, które miałem.
źródło
W moim przypadku sprawdziłem „mój oddział” i zrobiłem to
git pull
, więc nie mogłem zrozumieć, dlaczego push nie działa. W końcu zdałem sobie sprawę, że pcham niewłaściwą gałąź.git push origin master
Zamiast tego pisałemgit push origin mybranch
.Więc jeśli już to zrobiłeś
git pull
i nadal otrzymujesz ten komunikat, upewnij się, że przesuwasz właściwą gałąź.źródło
Czy nazwa twojego oddziału jest taka sama jak nazwa oddziału zdalnego?
Jeśli nie, sprawdź nowy oddział o tej samej nazwie co oddział zdalny i spróbuj ponownie.
Załóżmy, że gałąź zdalna, którą chcesz przekazać, to [ testowanie ], a lokalna gałąź ma nazwę [ test ].
Jeśli nie jesteś w gałęzi testowej , najpierw przełącz się na nią.
Następnie otwórz nowy oddział i nazwij go testowaniem .
Teraz nadszedł czas, aby to przeforsować:
źródło
$git branch -M <new_name>
aby zmienić nazwę oddziału lokalnego.Rozwiązałem ten problem w moim repozytorium GIT. W tym przypadku nie ma potrzeby
rebase
aniforce
zobowiązań. Aby rozwiązać ten problem, wykonaj poniższe czynności -mam nadzieję, że to pomoże.
źródło
Innym rozwiązaniem jest przesunięcie głowy pilota, dokonując kolejnego zatwierdzenia, jeśli możesz. Po wyciągnięciu tej zaawansowanej głowy do lokalnego poddrzewa będziesz mógł ponownie z niej wypchnąć.
źródło
Otrzymałem podobny błąd podczas wypychania najnowszych zmian do czystego repozytorium Git, którego używam dla gitweb . W moim przypadku nie wprowadziłem żadnych zmian w czystym repozytorium, więc po prostu usunąłem moje puste repozytorium i sklonowałem ponownie:
źródło
Jeśli masz pewność, że nikt nie wprowadził zmian w repozytorium git i pracujesz nad najnowszą wersją,
git pull
nie ma to sensu jako rozwiązanie w twoim sercu ...Więc prawdopodobnie tak się stało, użyłeś
git commit --amend
Samouczek ATLASSIAN: przepisywanie historii
Jednak nie zaleca się wykonywania,
git commit --amend
jeśli już wypchnąłeś zatwierdzenie do GitHub , ponieważ „zmiana nie zmienia tylko ostatniego zatwierdzenia - całkowicie go zastępuje. Dla Gita będzie wyglądać jak nowy zatwierdzenie” co oznacza dla innych programistów na twoim GitHubie, historia wygląda jak A-> B-> C, ale dla ciebie wygląda jak A-> B-> D, jeśli GitHub pozwalapush
, wszyscy inni będą musieli ręcznie naprawić swoją historięTo jest powód, dla którego pojawia się komunikat o błędzie
! [rejected] master -> master (non-fast-forward)
, jeśli wiesz, że nikt nie wyciągnął Twojej ostatniej zmiany, możesz to zrobićgit push --force
, zmieni to historię git w Twoim publicznym repozytorium . W przeciwnym razie ... możesz wykonaćgit pull
, ale wierzę, że przyniesie to taki sam wynik, jak nie przeszedłeśgit commit --amend
, utworzy nowe zatwierdzenie (tj: historia gita po git pull: A-> B-> C-> D )po więcej szczegółów: Jak zmienić swoje ostatnie zatwierdzenie
źródło
Inna opcja: lokalnie zmień nazwę swojego oddziału na coś nowego.
Będziesz wtedy mógł przekazać go do zdalnego repozytorium, na przykład, jeśli to twój sposób przechowywania kopii (kopii zapasowej) i upewnienia się, że nic nie zostanie utracone.
Możesz pobrać gałąź zdalną, aby uzyskać lokalną kopię i zbadać różnice między (i) tym, co miał pilot (ze starą nazwą gałęzi) a (ii) co masz (z nową nazwą gałęzi), i zdecydować, co zrobić . Ponieważ nie byłeś świadomy różnic między pilotem (stąd problem), po prostu łączenie lub wymuszanie gdzieś zmian jest zdecydowanie zbyt brutalne.
Spójrz na różnice, wybierz gałąź, nad którą chcesz pracować, wybierz zmiany wiśni, które chcesz z drugiej gałęzi lub cofnij zmiany, których nie chcesz w gałęzi, którą masz itp.
Następnie powinieneś być w stanie zdecydować, czy chcesz wymusić czystą wersję na pilocie, dodać nowe zmiany lub cokolwiek innego.
źródło
Problem z poleceniem push polega na tym, że twoje lokalne i zdalne repozytorium nie pasuje. JEŻELI domyślnie inicjujesz plik Readme podczas tworzenia nowego repozytorium z git hub, gałąź master jest tworzona automatycznie. Jednak przy próbie wypychania nie ma żadnej gałęzi. nie możesz naciskać ... Najlepszą praktyką jest tworzenie repozytoriów bez domyślnej inicjalizacji readme.
źródło
Ten problem jest zwykle powodowany przez utworzenie pliku readme.md, który jest liczony jako zatwierdzenie, nie jest synchronizowany lokalnie w systemie i brakuje go za głową, dlatego pokazuje żądanie ściągnięcia git. Możesz spróbować uniknąć pliku readme, a następnie spróbować zatwierdzić. W moim przypadku zadziałało.
źródło
Inna przyczyna tego problemu (najwyraźniej nie tak powszechna) ...
Mój serwer był opóźniony ~ 12 godzin, kiedy zrobiłem push
Skonfigurowałem NTP na serwerze SYNC mój zegar.
Wykonałem nowe polecenie git push, które doprowadziło do błędu omówionego w tym poście.
źródło
Jeśli przypadkiem zostanie
git pull
wydrukowany,Already up-to-date
możesz sprawdzić globalnypush.default
parametr git (In~/.gitconfig
). Ustaw,simple
jeśli to byłomatching
. Poniższa odpowiedź wyjaśnia, dlaczego:Git - Jaka jest różnica między „dopasowaniem” i „prostym” push.default
Warto również sprawdzić, czy lokalny oddział jest nieaktualny
git remote show origin
i w razie potrzeby wykonać pullźródło
use
git pull https://github.com/username/repository
Jest tak, ponieważ Github i zdalne repozytoria nie są zsynchronizowane. Jeśli topull
repozytorium, a następniePush
wszystko będzie zsynchronizowane, a błąd zniknie.`
źródło
git pull
drukuje jużup-to-date
rozwiązanie:
możesz utworzyć repozytorium / projekt na zdalnym serwerze (serwer) i dodać tam jakiś plik, a następnie ponownie utworzyć folder w swoim lokalnym i zainicjowanym git
git init
- to jest błąd , nie powinieneś tworzyćgit init
w lokalnym, zamiast tego klonuj projekt do lokalnego za pomocągit clone
następnie pociągnij
źródło