Ihre Filiale liegt 3 Commits vor 'origin / master'

354

Beim Laufen bekomme ich folgendes git status

Your branch is ahead of 'origin/master' by 3 commits.

Ich habe in einem anderen Beitrag gelesen git pull --rebase, wie das Problem behoben wird, aber was genau ist Rebase. Verliere ich Daten oder ist dies eine einfache Möglichkeit, mit dem Master zu synchronisieren?

FluxEngine
quelle
19
Ich denke nicht, dass dies ein Duplikat ist ... Diese Frage fragt, was es bedeutet, während die andere Frage fragt, wie die Änderungen verworfen werden sollen.
Zwiebeljake
11
Wie wurde dies von so vielen Menschen als Duplikat markiert? Die Frage zeigt offensichtlich, dass die Person ihre Änderungen nicht verlieren möchte. Sie haben Änderungen vorgenommen und sind durch die Nachricht verwirrt. Die sogenannte doppelte Frage würde die Person ihre Änderungen verlieren lassen.
Derek Greer
4
Ich muss sagen, dass die oben verlinkte Frage nicht wirklich ein Duplikat dieser Frage ist ...
Dave Kanter
15
@DerekGreer: Wie wurde dies als Duplikat markiert? Weil die meisten Leute, die Fragen als Duplikate markieren, sich nicht die Mühe machen, die Frage tatsächlich zu lesen und zu verstehen . Wenn es oberflächliche Ähnlichkeiten gibt, werden sie zu dem Schluss kommen, dass die beiden identisch sind, und es liegt an der OP oder anderen, die bereit sind, sich die Zeit zu nehmen, um sorgfältig zu wiederholen, was eigentlich offensichtlich gewesen sein sollte, wenn die Betrüger hatten tatsächlich darauf geachtet, aufmerksam zu sein.
Bilderstürmer
6
^^^ dessen Praxis SO tötet, IMO.
Geek Stocks

Antworten:

767

Sie erhalten diese Nachricht, weil Sie Änderungen an Ihrem lokalen Master vorgenommen und diese nicht auf die Fernbedienung übertragen haben. Sie haben mehrere Möglichkeiten, es zu "lösen", und es hängt normalerweise davon ab, wie Ihr Workflow aussieht:

  • In einem guten Workflow sollte Ihre Remote-Kopie des Masters die gute sein, während Ihre lokale Kopie des Masters nur eine Kopie der Remote-Kopie ist. Wenn Sie diesen Workflow verwenden, erhalten Sie diese Nachricht nie wieder.
  • Wenn Sie auf andere Weise arbeiten und Ihre lokalen Änderungen vorangetrieben werden sollten, nehmen Sie einfach an, git push origindass der Ursprung Ihre Fernbedienung ist
  • Wenn Ihre lokalen Änderungen fehlerhaft sind, entfernen Sie sie einfach oder setzen Sie Ihren lokalen Master auf den Remote-Status zurück git reset --hard origin/master
iberbeu
quelle
82
git reset --hard origin / master ist genau das, wonach ich gesucht habe. Vielen Dank.
FluxEngine
4
@iberbeu du hast meinen Tag gelöst ... git reset --hard origin / master ist was ich suche. + 1ed
Ravi
75
Auch fwiw git diff master origin/master(dh git diff local remote), um Änderungen zu sehen, die Sie entfernen werden
Shanimal
1
Ich habe local / master auf dem entfernten Ursprung / Zweig, also mit git push origin master:branchdem zurückgegebenen Everything up-to-date, danach verschwand die Nachricht, dass x Commits voraus sind.
Fyrye
2
Letzteres hat mir was ich dort brauchte!
RyanG
38

Es gibt nichts zu beheben. Sie haben einfach 3 Commits vorgenommen und diese noch nicht in den Remote-Zweig verschoben. Es gibt verschiedene Möglichkeiten, je nachdem, was Sie tun möchten:

  • git push: Verschieben Sie Ihre Änderungen auf die Fernbedienung (dies wird möglicherweise abgelehnt, wenn bereits andere Änderungen auf der Fernbedienung vorhanden sind.)
  • nichts tun und weiter codieren, einen weiteren Tag synchronisieren
  • git pull: Holen Sie sich die Änderungen (falls vorhanden) von der Fernbedienung und führen Sie sie in Ihre Änderungen ein
  • git pull --rebase: wie oben, aber versuchen Sie, Ihre Commits zusätzlich zu den Remote-Änderungen zu wiederholen

Sie befinden sich in einer klassischen Situation (obwohl Sie in den meisten Workflows normalerweise nicht viel für den Master tun würden). Folgendes würde ich normalerweise tun: Überprüfen Sie meine Änderungen. Vielleicht machen Sie ein git rebase --interactivepaar Kosmetika auf ihnen, lassen Sie diejenigen fallen, die saugen, ordnen Sie sie neu, um sie logischer zu machen. Bewegen Sie sie nun mit auf die Fernbedienung git push. Wenn dies abgelehnt wird, weil meine lokale Niederlassung nicht auf dem neuesten Stand ist: git pull --rebaseWiederholen Sie meine Arbeit zusätzlich zu den letzten Änderungen git push.

pmr
quelle
Ich habe Git Pull - Rebase verwendet, aber es heißt jetzt, dass ich um ein Commit voraus bin
FluxEngine
Also nahm ich die Änderungen vor, drängte zum Master und dann verschmolz unser Teamleiter zum Master. Die Änderungen sind also da. Ich muss mich nur mit dem aktuellen Master synchronisieren.
FluxEngine
@MartyMcFly Es ist schwer zu sehen, was hier los ist. Du sagst du hast schon gepusht? Warum verpflichten Sie sich immer noch, die nicht auf Master sind? Was meinst du damit your team lead merged to master? Hast du nicht gesagt, dass du schon zum Meister gedrängt hast? Was enthält das zusätzliche Commit? Versuchen Sie herauszufinden git diff origin/master, wie sich Ihr lokaler Zweig von der Fernbedienung unterscheidet.
PMR
1
Vielen Dank für die Hilfe. Tut mir leid, wenn ich die Situation schlecht erklärt habe. Aber was ich gesucht habe, ist Git Reset - Hard Origin / Master. Aber deine Antwort war hilfreich +1.
FluxEngine
Ich scheine zwischen einem Felsen und einem harten Ort festzusitzen, ich habe versucht, Änderungen vorzunehmen, dann sagte git: Sie haben 11 Verpflichtungen voraus. Ich darf das Remote-Repository nicht aktualisieren, daher ist ein Push nicht möglich. "git pull" sagt: Schon aktuell. Also habe ich Ihren dritten Vorschlag ausprobiert, aber dann sagt Git: Kann nicht mit Rebase ziehen: Sie haben nicht inszenierte Änderungen. Bitte begehen oder verstauen Sie sie. Duh, so bin ich überhaupt erst hierher gekommen :-(
Sander de Jong
36

Verwenden Sie diese 4 einfachen Befehle

Schritt 1 :git checkout <branch_name>

Dies ist offensichtlich, um in diesen Zweig zu gehen.

Schritt 2 :git pull -s recursive -X theirs

Nehmen Sie Änderungen an Remote-Zweigen vor und ersetzen Sie diese durch Änderungen, wenn Konflikte auftreten. Wenn Sie dies tun, erhalten git statusSie so etwas wie Ihre Niederlassung um 3 Commits vor 'origin / master'.

Schritt 3 :git reset --hard origin/<branch_name>

Schritt 4 :git fetch

Setzen Sie Ihren Zweig hart zurück.

Genießen.

Abhishek Goel
quelle
17

Ist auf dieses Problem gestoßen, nachdem ich eine Pull-Anfrage für Bitbucket zusammengeführt habe.

Musste tun

git fetch

und das war es.

Pragman
quelle
2
Ich habe mit einem Repo aus einem Bundle gearbeitet und konnte die Nachricht durch Anwenden von "git fetch" auf ein aktuelles Bundle entfernen. tnx!
Martin Meeser
Bei einer schreibgeschützten Kasse zeigte mein Git-Status, dass ich 2 Commits voraus war. Das Protokoll sah so aus, wie es sollte - alle Commits im Ursprung. Ich habe einen Git Pull gemacht und war 5 Commits voraus. WTF ????
Chris Rutledge
12

Wenn ich überprüfen muss, welche Commits sich vom Master unterscheiden, mache ich normalerweise Folgendes:

git rebase -i origin/master

Auf diese Weise kann ich die Commits sehen und entscheiden, sie fallen zu lassen oder auszuwählen ...

Alex
quelle
Diese niedrige Antwort hier unten war das, was ich tun musste. Ich konnte nicht herausfinden, wie ich den Unterschied herausfinden konnte, und all meine verschiedenen git diff ...Magie würde nicht funktionieren. Als ich das tat, gab es mir noopals einziges Commit, und als ich es akzeptierte, ist mein Zweig jetzt mit origin / master synchron. Es scheint also, dass die vom Ursprung / Master abweichenden Commits tatsächlich nichts waren.
Philo Vivero
11

Diese Nachricht von gitbedeutet, dass Sie drei Commits in Ihrem lokalen Repo vorgenommen und diese nicht im masterRepository veröffentlicht haben. Der dafür auszuführende Befehl lautet git push {local branch name} {remote branch name}.

Die Befehle git pull(und git pull --rebase) gelten für die andere Situation, in der auf dem Remote-Repo ein Commit ausgeführt wird, das Sie in Ihrem lokalen Repo nicht haben. Die --rebaseOption bedeutet, dass gitIhr lokales Commit beiseite geschoben, mit dem Remote-Repo synchronisiert und dann versucht wird, Ihre drei Commits aus dem neuen Status anzuwenden. Es kann fehlschlagen, wenn ein Konflikt vorliegt, aber Sie werden aufgefordert, diese zu beheben. Sie können den Vorgang auch abbrechen, rebasewenn Sie nicht wissen, wie die Konflikte mithilfe von gelöst werden können, git rebase --abortund Sie kehren vor dem Ausführen zum Status zurück git pull --rebase.

Sylvain Defresne
quelle
7

Wenn dein Idiot sagt, dass du voraus bist, dann erstmal,

Git Push Ursprung

Um sicherzustellen, dass Sie alle Ihre neuesten Arbeiten in Repo gepusht haben

Dann,

Git Reset - Hard Origin / Master

Zurücksetzen und Abgleichen mit dem Repo

Pratik Khadka
quelle
4

Dies ist mir einmal passiert, nachdem ich eine Pull-Anfrage auf Bitbucket zusammengeführt habe.

Ich musste nur tun:

git fetch

Mein Problem wurde gelöst. Ich hoffe das hilft!!!

Sudhir Vishwakarma
quelle
0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

endlich:

$ git push origin
Sand
quelle