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

Frankline
quelle

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.

Boris Brodski
quelle
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
Ingenieur
quelle
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
Aurelio A.
quelle
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

William Rossier
quelle
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
Bilal
quelle
4

Versuchen Sie diesen Befehl

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

dh $ git push -f -u origin master

Ivever Timothy
quelle
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.

Boris Zinchenko
quelle
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
Mike Q.
quelle
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.

MansoorShaikh
quelle
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
Richard
quelle
0

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

>git pull
>git commit -m "any meaning full message"
>git push
Sheo Dayal Singh
quelle
-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
alk453
quelle