Ich setze meinen lokalen Master mit diesem Befehl auf ein Commit zurück:
git reset --hard e3f1e37
Wenn ich einen $ git status
Befehl eingebe, sagt das Terminal:
# On branch master
# Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
# (use "git pull" to update your local branch)
#
nothing to commit, working directory clean
Da ich auch origin / header zurücksetzen möchte, checke ich auf origin / master aus:
$ git checkout origin/master
Note: checking out 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b new_branch_name
HEAD is now at 2aef1de... master problem fixed for master. its okay now.
und setzen Sie den Header mit diesem Befehl zurück:
$ git reset --hard e3f1e37
HEAD is now at e3f1e37 development version code incremented for new build.
Dann habe ich versucht, Commit zu Origin / Header hinzuzufügen, was mir nicht gelungen ist.
$ git commit -m "Reverting to the state of the project at e3f1e37"
# HEAD detached from origin/master
nothing to commit, working directory clean
Schließlich checke ich zu meinem lokalen Meister aus.
$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 7 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Da ich den Head of Origin / Master zurückgesetzt habe, erwarte ich, dass Local und Origin in die gleiche Richtung weisen, aber wie Sie sehen, sagt Git, dass mein Local / Master um 7 Commits hinter Origin / Master liegt.
Wie kann ich dieses Problem beheben? Die Dinge, die ich suche, sind Head of Local / Master und Origin / Master Point auf dasselbe Commit. Das folgende Bild zeigt, was ich getan habe. Vielen Dank.
quelle
Antworten:
origin/xxx
Zweige sind immer Zeiger auf eine Fernbedienung. Sie können sie nicht auschecken, da sie nicht auf Ihr lokales Repository verweisen (Sie checken nur das Commit aus. Aus diesem Grund wird der Name nicht in der Verzweigungsmarkierung der Befehlszeilenschnittstelle angezeigt, sondern nur der Commit-Hash).Um die Fernbedienung zu aktualisieren, müssen Sie Ihre lokalen Änderungen zwangsweise an den Master senden:
quelle
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
Die hier gefundene Lösung hat uns geholfen, den Master auf ein vorheriges Commit zu aktualisieren, das bereits gepusht wurde:
Der Hauptunterschied zur akzeptierten Antwort ist der Commit-Hash "e3f1e37:" vor dem Master im Push-Befehl.
quelle
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
you should pull first
:)git config receive.denynonfastforwards false
aber tatsächlich habe ich das manuell in meinem lokalen Git-Repository festgelegt/opt/git
, das ich erstellt habe, um mit den Ideen hier zu spielen. Ich bin mir nicht sicher, wie oder ob dies für Bitbucket, Github usw. möglich ist. Und @intuitivepixel ist sinnlos, da es das umkehrt, was Sie mit dem Hard-Reset erreichen wollten.Angenommen, Ihre Niederlassung wird
master
sowohl hier als auch remote aufgerufen , und Ihre Fernbedienung wird aufgerufen, könnenorigin
Sie Folgendes tun:Sie sollten dies jedoch vermeiden, wenn jemand anderes mit Ihrem Remote-Repository arbeitet und Ihre Änderungen abgerufen hat. In diesem Fall ist es besser, die nicht gewünschten Commits zurückzusetzen und dann wie gewohnt zu pushen.
quelle
Da ich eine ähnliche Situation hatte, dachte ich, ich würde meine Situation teilen und wie diese Antworten mir halfen (danke an alle).
Deshalb habe ich mich entschlossen, vor Ort zu arbeiten, indem ich mein letztes Commit jedes Mal geändert habe, wenn ich meinen Fortschritt im Hauptzweig speichern wollte (ich weiß, ich hätte mich verzweigen, mich darauf festlegen, weiter pushen und später wieder zum Master zusammenführen sollen).
Eines späten Abends beschloss ich aus paranoider Angst, meinen Fortschritt aufgrund eines Hardwarefehlers oder etwas aus dem Äther zu verlieren, den Meister zum Ursprung zu bringen. Später änderte ich meine lokale Hauptniederlassung weiter und als ich beschloss, dass es Zeit ist, erneut zu pushen, sah ich mich mit verschiedenen Hauptniederlassungen konfrontiert und stellte fest, dass ich origin / upstream ( duh! ) Nicht wie lokale Entwicklungszweige ändern kann.
Ich habe den Master also nicht lokal ausgecheckt, da ich bereits nach einem Commit war. Der Meister war unverändert. Ich musste nicht einmal zurücksetzen - hart, mein aktuelles Commit war in Ordnung.
Ich habe nur den Push-to-Origin erzwungen, ohne auch nur anzugeben, welches Commit ich dem Master aufzwingen wollte, da es in diesem Fall das ist, worauf sich HEAD bezieht. Überprüft,
git diff master..origin/master
damit es keine Unterschiede gab und das war's. Alles behoben. Vielen Dank! (Ich weiß, ich bin ein Idiot, bitte vergib!).Wenn Sie mit Ihrer Hauptniederlassung vor Ort bereits einverstanden sind, gehen Sie einfach wie folgt vor:
quelle