! [abgelehnt] master -> master (zuerst holen)

94

Gibt es eine gute Möglichkeit zu erklären, wie man " ! [rejected] master -> master (fetch first)'" in Git auflöst?

Wenn ich diesen Befehl verwende $ git push origin master, wird eine Fehlermeldung angezeigt.

! [rejected]        master -> master (fetch first)
error: failed to push some refs to '[email protected]:zapnaa/abcappp.git'
Symfony
quelle

Antworten:

126

Die Antwort ist da, Git sagt dir, dass du zuerst holen sollst.

Wahrscheinlich hat jemand anderes bereits versucht, das zu meistern, und Ihr Commit ist im Rückstand. Daher müssen Sie das Änderungsset abrufen, zusammenführen und dann erneut pushen.

Wenn Sie dies nicht tun (oder noch schlimmer, wenn Sie es mithilfe der --forceOption erzwingen ), können Sie den Festschreibungsverlauf durcheinander bringen.

EDIT: Ich gehe näher auf den letzten Punkt ein, da ein Typ hier gerade den sehr schlechten Rat gegeben hat, die --forceOption zu verwenden.

Da es sich bei git um ein DVCS handelt, arbeiten idealerweise viele andere Entwickler an demselben Projekt wie Sie und verwenden dasselbe Repository (oder einen Teil davon). Wenn Sie mit Ihrem Änderungssatz zwangsweise überschreiben, stimmt Ihr Repository nicht mit dem anderer Personen überein, da "Sie den Verlauf neu geschrieben haben". Sie werden andere Menschen unglücklich machen und das Repository wird leiden. Wahrscheinlich wird auch ein Kätzchen auf der Welt weinen.

TL; DR

  1. Wenn Sie lösen möchten, holen Sie zuerst (und führen Sie dann zusammen).
  2. Wenn Sie hacken möchten, verwenden Sie die --forceOption.

Sie haben jedoch nach dem ersteren gefragt. Gehen Sie für 1) immer, auch wenn Sie git immer selbst verwenden, weil es eine gute Praxis ist.

Linuxbandit
quelle
5
Können wichtige Änderungen in lokalen Dateien nicht abgerufen werden?
Leonardo Castro
2
Es ändert sich nicht nach einem Abruf
dhein
@dhein, wie ich geschrieben habe, muss auf den Abruf eine Zusammenführung folgen - der Punkt ist, dass Sie den lokalen Baum mit dem entfernten Baum "ausrichten" müssen (daher mit der Zusammenführung) - aber danke, ich habe ihn in die TL geschrieben; DR auch
Linuxbandit
82

Versuchen:

git fetch origin master
git merge origin master

Nachdem ich diesen Code geschrieben hatte, erhielt ich einen anderen Fehler: (nicht schneller Vorlauf)

Ich schreibe diesen Code:

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

Und mein Problem gelöst

Aurelio A.
quelle
Auch für mich. Das hat mein Problem gelöst. Es gibt einige Warnungen. Ich habe ein Sub-Repository durcheinander gebracht, es aber damit gelöst: stackoverflow.com/questions/19584255/…
M. Beausoleil
1
@ Aurelio A Ihr Zusammenführungsbefehl ist falsch, sollte es sein git merge master.
Mike
Warum müssen wir git branch -D tmp verwenden?
22лош Вељковић
Sehr nützliche Lösung (+1)
HuserB1989
Ich wünschte, ich könnte es mehr als einmal positiv bewerten !!
Saloni Tayal
24

Sie sollten verwenden git pull, das ist der Befehl do a git fetchund als nächstes do the git merge.

Wenn Sie einen git push origin master --forceBefehl verwenden, können in Zukunft Probleme auftreten.

Unai Sainz de la Maza
quelle
1
Ist es richtig, dass Sie --force nur verwenden sollten, wenn Sie der einzige im Projekt sind und frustriert sind, wenn Sie versuchen, Ihren ersten Push auszuführen?
Chrips
20

Pull ist immer der richtige Ansatz, aber eine Ausnahme könnte sein, wenn Sie versuchen, ein Nicht-Git-Dateisystem in ein Github-Repository zu konvertieren. Dort müssten Sie das erste Commit erzwingen.

git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/userName/repoName.git
git push --force origin master
JD
quelle
funktioniert für mich, ich habe wieder ein neues projekt gestartet (gleiches repo) und wollte es ersetzen.
Ucotta
16

Versuchen Sie diesen git-Befehl

git push origin master --force

oder zu wenig Kraft -f

git push origin master -f


quelle
2
Dies überschreibt die Git-Push-Einschränkung. Nicht für Teamarbeit empfohlen. Aus der Git-Push-Dokumentation: Wenn jemand anderes während des erneuten Basierens auf Ihrer ursprünglichen Historie aufbaut, kann die Spitze des Zweigs auf der Fernbedienung mit ihrem Commit vorrücken, und blindes Drücken mit --force verliert ihre Arbeit .
Casey
8

Wie in der Fehlermeldung angegeben, müssen Sie "zuerst abrufen". Das hat bei mir funktioniert. Verwenden Sie den Befehl:

  1. git fetch origin master

Führen Sie dann die folgenden Schritte aus, um sie zusammenzuführen:

  1. git pull origin master
  2. git add .
  3. git commit -m 'your commit message'
  4. git push origin master
Amila Weerasinghe
quelle
3

Sie können den folgenden Befehl verwenden: Klonen Sie zuerst eine neue Kopie Ihres Repos mit dem Flag --mirror:

$ git clone --mirror git://example.com/some-big-repo.git

Folgen Sie dann den Codes entsprechend:

Hinzufügen eines vorhandenen Projekts zu GitHub über die Befehlszeile

Auch wenn das nicht funktioniert, können Sie einfach codieren:

$ git push origin master --force 

oder

$ git push origin master -f
Tanuj Chakraborty
quelle
3

Befolgen Sie die unten angegebenen Schritte, da ich auch das gleiche Problem hatte:

$ git pull origin master --allow-unrelated-histories 

(Um zu sehen, ob der lokale Zweig leicht mit dem entfernten Zweig zusammengeführt werden kann)

$ git push -u origin master 

(Verschieben Sie nun den gesamten Inhalt des lokalen Git-Repositorys in Ihr Online-Repository.)

Bhavdeep Kaur
quelle
2

Es ist wahrscheinlich, dass jemand anderes (z. B. Ihr Kollege) Festschreibungen vorgenommen hat origin/master, die sich nicht in Ihrer lokalen masterZweigstelle befinden, und Sie versuchen, einige Festschreibungen von Ihrer lokalen Zweigstelle auf den Server zu übertragen. In 99% der Fälle originhaben Sie zwei Möglichkeiten , vorausgesetzt, Sie möchten ihre Arbeit nicht löschen.

2) Führen Sie die Änderungen in Ihrer lokalen Niederlassung zusammen und übertragen Sie das zusammengeführte Ergebnis. git checkout master git pull # resolve conflicts here git push

(Beachten Sie, dass dies in diesem Fall im git pullWesentlichen nur ein git fetchund ein git mergeist.)

1) Starten Sie Ihre lokale Niederlassung neu, sodass es so aussieht, als ob Ihr Kollege zuerst seine Commits gemacht hat und Sie dann Ihre Commits gemacht haben. Dies hält den Commit-Verlauf schön und linear - und vermeidet ein "Merge-Commit". Wenn Sie jedoch Konflikte mit den Änderungen Ihres Kollegen haben, müssen Sie diese Konflikte im schlimmsten Fall möglicherweise für jedes Ihrer Commits (und nicht nur einmal) lösen. Im Wesentlichen ist dies für alle anderen schöner, aber mehr Aufwand für Sie. git pull --rebase # resolve conflicts here git push

(Beachten Sie, dass dies git pull --rebaseim Wesentlichen a git fetchund a ist git rebase origin/master.)

Chrispher
quelle
2

Manchmal passiert es, wenn Sie Dateien duplizieren, die normalerweise README-artig sind.

Jarosław Cichoń
quelle
1

Ihr Fehler könnte auf den Zusammenführungszweig zurückzuführen sein.
Folgen Sie einfach diesem:

Schritt 1: git pull origin master(Falls Sie eine Nachricht erhalten, ignorieren Sie diese)
Schritt 2: git add .
Schritt 3: git commit -m 'your commit message'
Schritt 4:git push origin master

Divyang Hirpara
quelle
1

Zuerst sollten Sie den git pullBefehl do a verwenden git fetchund dann den Git-Merge ausführen.

Wenn Sie einen git push origin master --forceBefehl verwenden, können in Zukunft Probleme auftreten.

Imkanaram
quelle
1

Bitte versuchen Sie diesen Befehl, um es zu lösen -

git push origin master --force

Oder

 git push origin master -f
Mahfujur Rahman
quelle
0

Problem gelöst

Problem hatte ich

! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/repo_name/repo-hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g.hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Ich hatte auch das gleiche Problem. Das Problem ist, dass Ihre commitsin anderen Repositorys nicht erfolgreich waren, pushedsodass Sie die folgenden Befehle ausführen müssen:

  1. git fetch origin master

    Ausgabe: From https://github.com/username/repo-name * branch master -> FETCH_HEAD

  2. git merge origin master

    Ausgabe: Merge made by the 'recursive' strategy. repo-name/ReadMe.md | 1 - 1 file changed, 1 deletion(-)

  3. git push

    Ausgabe: Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 8 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.00 KiB | 1.00 MiB/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/user_name/repo-name.git 0852d5vf..70v56d9 master -> master

Ich danke dir sehr

Marschall D. Teach
quelle
0

Ich habe dies überwunden, indem ich einen neuen Zweig wie diesen ausgecheckt habe:

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

Sie haben noch zwei Zweige: Master und Newbranch, die Sie später zusammenführen können.

user3826395
quelle
0

Sie müssen nur Ihren Filialnamen zusammen mit Ihrem Remote-Namen angeben.

git fetch origin
git merge origin/master
Amit Kharel
quelle
0

Der Grund, warum es in meinem Fall passiert ist, war, dass ich beim Erstellen des GitHub-Rep-Links ihn initialisiert habe README-Datei

Initialisieren Sie Git Remote beim Erstellen nicht mit der README-Datei, da sonst Fehler angezeigt werden

Tun Sie das nicht und es wird auf jeden Fall gut funktionieren. Initialisieren Sie es stattdessen mit der Readme-Datei, wenn Sie möchten, nachdem Sie zum Hauptzweig gewechselt haben

Arijit Kundu
quelle
-1

diese Arbeit für mich

  1. git init

  2. git add --all

3.git commit -m "name"

4.git push origin master --force

Mizanur Rahman
quelle
-1

Das hat bei mir funktioniert:

$ git add .
$ git commit -m "commit"
$ git push origin master --force
Yamuna Bangaru
quelle
-1

Es ist einfach, diesen Befehl zu verwenden:

Git Push -f Ursprungsmaster

und es wird Ihre Arbeit erledigen

Rajat Prakash
quelle