Git Push abgelehnt "Nicht-Schnellvorlauf"


90

Ich bin noch ziemlich neu gitdarin, unseren Code derzeit in einer Teamumgebung zu verwalten. Ich hatte einige Probleme mit der Neugründung und habe sie mit behoben

git checkout --ours filename.txt
git add filename.txt
git rebase --continue

Jetzt möchte ich meine Änderungen verschieben und so den folgenden Befehl ausführen

$ git push origin feature/my_feature_branch

gibt mir folgenden Fehler:

To ssh://git@coderepo.com:7999/repo/myproject.git
 ! [rejected]        feature/my_feature_branch -> feature/my_feature_branch (non-fast-forward)
error: failed to push some refs to 'ssh://git@coderepo.com:7999/repo/myproject.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.

Was kann ich tun, um den Fehler zu beseitigen?

PS: Ich vermeide es, die --forceOption so oft wie möglich zu nutzen.


Antworten:


76

Es sieht so aus, als hätte jemand neue Commits zwischen Ihrem letzten git fetchund git push. In diesem Fall müssen Sie Ihre Schritte wiederholen und noch einmal neu starten my_feature_branch.

git fetch
git rebase feature/my_feature_branch
git push origin feature/my_feature_branch

Nach dem git fetchempfehle ich die Situation mit zu untersuchen gitk --all.


Was tun, um Git Pull Origin Master zu aktivieren: Master, der standardmäßig zusammengeführt werden soll. Ist dies ein Zusammenführungskonflikt oder nicht? Dies ist die einzige Frage, die gestellt wird.
Mathtick

24

Wahrscheinlich haben Sie die Remote-Änderungen vor dem Rebase nicht abgerufen, oder jemand hat neue Änderungen gepusht (während Sie den Base neu erstellt und versucht haben, zu pushen). Versuchen Sie diese Schritte:

#fetching remote 'feature/my_feature_branch' branch to the 'tmp' local branch 
git fetch origin feature/my_feature_branch:tmp

#rebasing on local 'tmp' branch
git rebase tmp

#pushing local changes to the remote
git push origin HEAD:feature/my_feature_branch

#removing temporary created 'tmp' branch
git branch -D tmp

Dies löst mein Problem: Als ich meinen Code festgeschrieben habe, habe ich eine Neubasis durchgeführt (zu spät, es gab bereits Änderungen, sollte dies vor dem Festschreiben tun). Dann gab es auch keinen Konflikt, ich konnte nicht pushen. Nachdem ich oben Magie angewendet hatte, funktionierte es. Vielen Dank.
Jing Li

18

Ich hatte dieses Problem! Ich habe versucht: Git Fetch + Git Merge, aber nicht gelöst! Ich habe versucht: Git Pull, und auch nicht gelöst

Dann habe ich dies versucht und mein Problem gelöst (ähnelt der Antwort von Engineer):

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

7
Das hat mich verarscht, ich habe Sachen direkt an den Master geschoben und den Einsatz von einem ganzen Tag an geschoben ... und alle sind sauer ... FANTASTISCHE TIPPS!
Mike Q

6
Vielleicht möchten Sie zusammenfassend erklären, was Sie tun, bevor Sie jemandem ein gefährliches Werkzeug geben.
Mirv - Matt

10

Ich hatte ein ähnliches Problem und löste es mit: git pull origin


1
Hat mir geholfen, als ich den fraglichen Fehler beim Ziehen eines Remote-Zweigs erhalten habe.
GChuf

7

Ich bin zu spät zur Party, aber ich habe einige nützliche Anweisungen auf der Github-Hilfeseite gefunden und wollte sie hier teilen.

Manchmal kann Git Ihre Änderung nicht an einem Remote-Repository vornehmen, ohne Commits zu verlieren. In diesem Fall wird Ihr Push abgelehnt.

Wenn eine andere Person auf denselben Zweig wie Sie verschoben hat, kann Git Ihre Änderungen nicht übertragen:

$ git push origin master
To https://github.com/USERNAME/REPOSITORY.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/USERNAME/REPOSITORY.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Sie können dies beheben, indem Sie die auf dem Remote-Zweig vorgenommenen Änderungen abrufen und mit den lokal vorgenommenen Änderungen zusammenführen:

$ git fetch origin
# Fetches updates made to an online repository
$ git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

Oder Sie können einfach git pullbeide Befehle gleichzeitig ausführen:

$ git pull origin YOUR_BRANCH_NAME
# Grabs online updates and merges them with your local work

4

Versuchen Sie diesen Befehl

$ git push -f -u origin <name of branch>

dh $ git push -f -u origin master


Das hat in meinem Fall funktioniert, als die anderen es nicht taten. Manchmal muss man git -f -u
gcr nur

1

Schreibsperre für freigegebenes lokales Repository

Ich hatte dieses Problem und keiner der oben genannten Ratschläge hat mir geholfen. Ich konnte alles richtig holen. Aber Push ist immer gescheitert. Es war ein lokales Repository im Windows-Verzeichnis, mit dem mehrere Clients über den gemeinsam genutzten VMWare-Ordnertreiber arbeiten. Es schien, dass eines der Systeme das Git-Repository zum Schreiben gesperrt hatte. Nach dem Stoppen des relevanten VMWare-Systems, das die Sperre verursachte, wurde alles sofort repariert. Es war fast unmöglich herauszufinden, welches System den Fehler verursacht, also musste ich sie einzeln stoppen, bis es erfolgreich war.


1

Nun, ich habe den Rat hier verwendet und es hat mich verarscht, als es meinen lokalen Code direkt zum Master zusammenführte. .... also nimm alles mit einem Körnchen Salz. Mein Kollege sagte, dass das Folgende zur Lösung des Problems beitrug, das erforderlich war, um meine Niederlassung neu zu ordnen.

 git branch --set-upstream-to=origin/feature/my-current-branch feature/my-current-branch

0

Gehen Sie in Eclipse wie folgt vor:

GIT-Repositorys> Fernbedienungen> Ursprung> Klicken Sie mit der rechten Maustaste und sagen Sie Abrufen

GIT-Repositorys> Remote-Tracking> Wählen Sie Ihren Zweig aus und sagen Sie Zusammenführen

Gehen Sie zum Projekt, klicken Sie mit der rechten Maustaste auf Ihre Datei und sagen Sie Abrufen vom Upstream.


0
  1. Verschieben Sie den Code in einen neuen Zweig - git branch -b tmp_branchyouwantmergedin
  2. Wechseln Sie zu dem Zweig, den Sie zusammenführen möchten - git checkout mycoolbranch
  3. Setzen Sie den Zweig zurück, den Sie zusammenführen möchten, um - git branch reset --hard HEAD
  4. füge den tmp-Zweig in den gewünschten Zweig ein - git-Zweig füge tmp_branchyouwantmergedin zusammen
  5. zum Ursprung schieben

0

Hier ist eine andere Lösung, um dieses Problem zu beheben

>git pull
>git commit -m "any meaning full message"
>git push

-1
  1. Machen Sie das lokale Commit rückgängig. Dadurch wird nur das Festschreiben rückgängig gemacht und die Änderungen in der Arbeitskopie bleiben erhalten
git reset --soft HEAD~1
  1. Ziehen Sie die neuesten Änderungen
git pull
  1. Jetzt können Sie Ihre Änderungen zusätzlich zum neuesten Code festschreiben
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.