Git-Fehler: Fehler beim Senden einiger Refs an Remote

448

Aus irgendeinem Grund kann ich jetzt nicht pushen, während ich es gestern tun könnte. Vielleicht habe ich Configs oder so was durcheinander gebracht.

Das ist, was passiert:

Wenn ich den Git Push Origin Master benutze

gitbashscr

Wie mein Arbeitsverzeichnis und mein Remote-Repository aussehen:

Screenshot des Windows-Dateiordners mit den folgenden Verzeichnissen: .git, css, js.  Und diese Dateien: index.php, readme, setsu.php.  Das Wort "local" mit einem Pfeil zeigt auf den CSS-Ordner.  Unten Screenshot mit der Überschrift "github" sowie einem CSS-Ordner und einer index.php-Datei

leipzy
quelle
7
Es sieht so aus, als ob Ihr lokales Repo nicht mit dem Git-Repo synchronisiert ist. Hast du versucht, Git Pull zu machen?
R11G
1
Ja, aber ich habe keine Ahnung mit der folgenden Syntax nach Git Pull. Dort steht Git Pull <Remote> <branch>. Können Sie mir eine Beispielsyntax für Git Pull zeigen?
Leipzy
1
Überprüfen Sie diese ähnliche Frage - stackoverflow.com/questions/18588974/…
R11G
3
@ R11G danke Sir! Dieser Link hat mir geholfen stackackflow.com/a/18589043/3626672
leipzy
2
Ich habe diesen Fehler bei einem neuen Repo erhalten. Dies half: stackoverflow.com/a/6518774/2067690
HumanInDisguise

Antworten:

618

Wenn das GitHub-Repo während Ihrer lokalen Arbeit neue Commits erhalten hat, würde ich empfehlen, Folgendes zu verwenden:

git pull --rebase
git push

Die vollständige Syntax lautet:

git pull --rebase origin master
git push origin master

Mit Git 2.6+ (Sept. 2015), nachdem (einmal)

git config --global pull.rebase true
git config --global rebase.autoStash true

Ein einfaches git pullwäre genug.
(Hinweis: Mit Git 2.27 Q2 2020 ist a merge.autostashauch für Ihren regulären Pull ohne Rebase verfügbar.)

Auf diese Weise würden Sie (den --rebaseTeil) Ihrer lokalen Commits zusätzlich zu den neu aktualisierten origin/master(oder origin/yourBranch:git pull origin yourBranch .

Ein vollständigeres Beispiel finden Sie in Kapitel 6 Pull with Rebase des Git Pocket Book .

Ich würde empfehlen:

# add and commit first
git push -u origin master

Dies würde eine Verfolgungsbeziehung zwischen Ihrer lokalen Hauptniederlassung und ihrer vorgelagerten Niederlassung herstellen.
Danach kann jeder zukünftige Push für diesen Zweig mit einem einfachen:

git push

Siehe " Warum muss ich einen neuen Zweig explizit pushen? ".


Da das OP sein Commit bereits zurückgesetzt und wiederholt hat, zusätzlich zu origin/master:

git reset --mixed origin/master
git add .
git commit -m "This is a new commit for what I originally planned to be amended"
git push origin master

Es besteht keine Notwendigkeit pull --rebase .

Hinweis: git reset --mixed origin/masterKann auch geschrieben werden git reset origin/master, da die --mixedOption bei Verwendung die Standardoption ist git reset.

VonC
quelle
Ist es in Ordnung, Ihren vorgeschlagenen Git Pull - Rebase auszuführen ...? Weil ich es bereits getan habe> git reset --mixed origin / master> git add. > Git commit -m „Dies ist ein neues Commit für das, was ich ursprünglich geplant , ein amendmend zu sein“> git push origin master hier vorgeschlagene stackoverflow.com/questions/18588974/... btw Ihre Antwort sieht hilfreich Sir
leipzy
3
Für mich musste ich nur "git commit" ausführen. :(
Tyler
Vielen Dank, ein dummes Problem mit Git LFS wurde behoben. Ich habe mich damit abgefunden, von nun an die Befehlszeile verwenden zu müssen, haha.
Tyler C
2
Wirklich super .. unten Befehle haben bei mir funktioniert ... git reset --mixed origin / master git add. git commit -m "Dies ist ein neues Commit für das, was ich ursprünglich ändern wollte" git push origin master Vielen Dank @VonC
Hari Narayanan
1
Danke es funktioniert! Ich habe stundenlang nach dieser Lösung gesucht!
Redion Xhepa
95

Hat jemand versucht:

git push -f origin master

Das sollte das Problem lösen.

EDIT: Basierend auf @Mehdis Kommentar unten muss ich etwas klarstellen —force pushing. Der obige Befehl git funktioniert nur beim ersten Festschreiben sicher. Wenn bereits zuvor Commits, Pull-Anforderungen oder Verzweigungen vorhanden waren, wird alles zurückgesetzt und auf Null gesetzt. Wenn ja, lesen Sie bitte die ausführliche Antwort von @VonC, um eine bessere Lösung zu finden.

Cagcak
quelle
25
Funktioniert aber schlecht, bitte verwenden Sie es nicht, es sei denn, Sie wissen, was Sie tun. (wahrscheinlich wissen Sie nicht, was Sie tun, wenn Sie in SO suchen)
Mehdi
3
Wenn Sie es versuchen -f/ --forcees ist immer sicherer, --force-with-leasestattdessen zu verwenden , was abgebrochen wird, wenn es nachgelagerte Änderungen gibt, die durch den Push blockiert würden. --force-with-leasewird für viele alltägliche Rebasing-Situationen benötigt, --forcesollte aber fast nie benötigt werden.
Joshua Goldberg
63

Wenn Sie gerade git initIhre Dateien mit git add .oder etwas Ähnlichem verwendet und hinzugefügt und Ihren Remote-Zweig hinzugefügt haben, kann es sein, dass Sie git commit -m 'commit message'lokal nichts festgeschrieben ( ) haben, um es auf die Remote zu übertragen ... Ich hatte gerade diesen Fehler und das war mein Fehler Problem.

ironcladmvtm
quelle
1
bin gerade darauf gestoßen. Der Commit-Befehl funktionierte während des Git-Adds nicht. Guter Anruf. Danke
jgritten
1
Danke, Mann! Das ist es. Ich dachte, ich hätte meine Änderungen vorgenommen. Jetzt funktioniert Git Push -u Origin Master einwandfrei.
Tleo
36

Ich hatte das gleiche Problem. Ich bekam dieses Problem, weil ich kein Commit gemacht hatte, nicht einmal das anfängliche Commit, und trotzdem versuchte ich zu pushen.

Einmal habe ich git commit -m "your msg"und dann hat alles gut funktioniert.

ppmakeitcount
quelle
8
Das macht nicht viel Sinn. Die ursprüngliche Frage bezieht sich auf den lokalen Git, der dahinter steckt . In keiner Weise kann "hinterher sein" gelöst werden, wenn ich ein lokales Commit mache!
GhostCat
Oh, ich vergesse auch zu begehen: p
Shams Nahid
Dies ist auch möglich, es wird Ihnen nicht erlauben, mit einem leeren Commit zu pushen
mboy
3
Ich hatte gerade dieses Problem und habe vergessen, mich zu verpflichten. Fehlermeldung sollte klarer sein
Ivan Topić
1
Es trifft auf mich zu, da ich genau diese Fehlermeldung erhalten habe und diese Lösung mein Problem behoben hat.
Diego Fortes
19

Benennen Sie Ihren Zweig um und drücken Sie dann, z.

git branch -m new-name
git push -u new-name

Das hat bei mir funktioniert.

p8ul
quelle
1
es hat funktioniert, aber bitte erklären Sie, warum wir es tun sollten
kanlukasz
Wow, das hat tatsächlich funktioniert, aber warum? Ich hatte einen Bindestrich in meinem lokalen Filialnamen : my-branch_wont_push. Sobald ich es umbenannt habe my_branch_wont_push, habe git push -u origin my_branch_wont_pushich für mich gearbeitet.
cdabel
13

Die Lösung für dieses Problem finde ich in der Github-Hilfe.

Sie sehen es an: Umgang mit Fehlern beim nicht schnellen Vorlauf

Es sagt:

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 branch
# Merges updates made online with your local work

Oder Sie können einfach git pull verwenden, um beide Befehle gleichzeitig auszuführen:

$ git pull origin branch
# Grabs online updates and merges them with your local work
Sealter
quelle
1
Dies ist der normale Prozess, wenn die Dinge wie erwartet funktionieren. Es hilft nichts, wenn Git denkt, dass es bereits auf dem neuesten Stand ist, wie @rubyandcoffee gefragt hat.
Tim
10
  1. git init

  2. git remote add origin https://gitlab.com/crew-chief-systems/bot

  3. git remote -v (zur Überprüfung des aktuellen Repositorys)

  4. git add -A(alle Dateien hinzufügen)

  5. git commit -m 'Added my project'

  6. git pull --rebase origin master

  7. git push origin master

James Siva
quelle
Bevor Sie den Code drücken, müssen Sie ihn aus dem Repository ziehen
James Siva
Sie können einfach schreiben wie Git Pull - Rebase Origin Master
James Siva
6

Ich hatte das gleiche Problem, das mit den folgenden Schritten behoben wurde.

  1. git init
  2. git add .
  3. git commit -m 'Add your commit message'
  4. git remote add origin https://[email protected]/User_name/sample.git

    (Die obige URL https: //[email protected]/User_name/sample.git bezieht sich auf die URL Ihres Bit-Bucket-Projekts.)

  5. git push -u origin master

Hinweis

Überprüfen Sie, ob Ihr Git-Hub-Konto mit Ihrem lokalen Git verknüpft ist, indem Sie Folgendes verwenden:

git config --global user.email "[email protected]"
git config --global user.name "Your Name"
Divya
quelle
4

Wenn Sie Gerrit verwenden, kann dies durch eine unangemessene Änderungs-ID im Commit verursacht werden. Versuchen Sie, die Änderungs-ID zu löschen, und sehen Sie, was passiert.

Jim Sime
quelle
4

Denken Sie daran, Ihre Änderungen zu übernehmen, bevor Sie zu Github Repo wechseln. Dies könnte Ihr Problem beheben.

Alf Moh
quelle
4

Das Problem wird auch dadurch behoben, dass vor dem Drücken keine ersten Änderungen vorgenommen werden

Klaue
quelle
3

Vor dem Push müssen Sie die Änderungen hinzufügen und festschreiben oder tun git push -f origin master

Kinnera Reddy
quelle
3
git push origin {your_local_branch}:{your_remote_branch}

Wenn Ihr lokaler Zweig und Ihr Remote-Zweig denselben Namen haben, können Sie den Namen Ihres lokalen Zweigs einfach weglassen git push {your_remote_branch}. Andernfalls wird dieser Fehler ausgegeben.

Yitong Feng
quelle
3

Ich habe die folgenden Schritte befolgt und es hat bei mir funktioniert.

 rm -rf .git
 git init
 git add .
 git commit -m"first message"
 git remote add origin "LINK"
 git push -u origin master
ASHISH RANJAN
quelle
2

Es kann passieren, wenn Sie keine Dateien haben. Versuchen Sie, eine Textdatei zu erstellen, und befolgen Sie dann die folgenden Befehle

git add .
git commit -m "first commit"
git push --set-upstream origin master
Sushil Suthar
quelle
2

Für mich war das Problem, dass ich die Dateien vor dem Festschreiben nicht hinzugefügt habe.

git add .

git commit -m "your msg"

Rohitsam
quelle
2

Am besten verwenden rm -rf .git/hooksund dann Git Push versuchen

Binod Singh
quelle
Interessant, es hat mir in einem Fall geholfen, in dem es eindeutig keine Commits zur Herkunft gab (keine Notwendigkeit, erneut zu gründen).
Pevik
Warum würdest du all deine Haken rauswerfen? Vielleicht zuerst ein Backup machen?
MSpreij
2

Ich habe ein leeres Repo in GitHub erstellt und habe meinen Code lokal. Ich hatte jetzt das gleiche Problem, als ich der folgenden Sequenz folgte:

git init
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git add .
git push -u origin master

PROBLEM WAR: Ich habe versucht, ein Commit durchzuführen , bevor ich die Dateien bereitgestellt habe, die ich habe.

Also müssen wir die Dateien inszenieren und uns dann verpflichten.

Dies ist die richtige Reihenfolge.

git init
git add .
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git push -u origin master

Da ich zuerst die falsche Sequenz ausführe, führe ich nur die folgenden Befehle aus

git add .
git commit -m 'Initial Commit'
git push -u origin master
Kavin Raju S.
quelle
1

Ich bin mir nicht sicher, ob dies zutrifft, aber die Lösung für mich bestand darin, nach git init etwas lokal festzuschreiben. Dann habe ich mit --set-upstream auf Remote geschoben ...

user1889992
quelle
1

Erstellen eines neuen Zweigs für mich gelöst:

git checkout -b <nameOfNewBranch>

Wie erwartet ist keine Zusammenführung erforderlich, da der vorherige Zweig vollständig im neuen enthalten war.

Santiago M. Quintero
quelle
1
Ich hatte genau dieses Problem, ich war auf Feature22 und habe es getan git push origin feature22-fix, aber feature22-fixweder lokal noch remote beendet, also musste ich zuerst den Zweig lokal auschecken und dann Push
Honey
1

Wenn Sie versuchen, ein Verzeichnis mit einem vorhandenen GitHub-Repository zu initialisieren, sollten Sie sicherstellen, dass Sie Änderungen vornehmen.

Versuchen Sie, eine Datei zu erstellen:

touch initial
git add initial
git commit -m "initial commit"
git push -u origin master

Dadurch wird eine Datei mit dem Namen initial abgelegt, die Sie später löschen können.

Hoffe diese Antwort hilft! Viel Glück!

Andreas größer
quelle
1

Sie müssen etwas Kraft geben

Drücken Sie einfach --force.

Ankit
quelle
1

In meinem Fall war es mein huskyPaket, das den Push nicht zulässt.

> husky - pre-push hook failed (add --no-verify to bypass)
> husky - to debug, use 'npm run prepush'
error: failed to push some refs to 'https://[email protected]/username/my-api.git'

Um es kräftig zu schieben, renne einfach git push origin master --no-verify

Ich lief npm run prepush, um den Fehler zu debuggen, und dies war die Ursache:

npm ERR! code ELOCKVERIFY
npm ERR! Errors were found in your npm-shrinkwrap.json, run  npm install  to fix them.
npm ERR!     Invalid: lock file's [email protected] does not satisfy loopback-utils@^0.9.0

Ran npm installund Commit es, und das Problem ist behoben.

Jee Mok
quelle
1

mach das

git rm --cached *
git add .
git commit -m"upload"
git push --set-upstream origin master

Viel Spaß beim Codieren!

Mach Nhu Vy
quelle
1

Versuchen Sie diesen git-Befehl,

git push origin master –f
git push origin master --force
Zin Myo Swe
quelle
0

Nun, wenn keine der oben genannten Antworten funktioniert und Sie in ssh-addletzter Zeit etwas durcheinander gebracht haben . Versuchen

ssh-add -D
Abhisek
quelle
0

Für Sourcetree-Benutzer

Führen Sie zuerst eine erste Festschreibung durch oder stellen Sie sicher, dass Sie keine nicht festgeschriebenen Änderungen vorgenommen haben. Dann befindet sich neben dem Quellbaum ein "FERN", klicken Sie mit der rechten Maustaste darauf und klicken Sie dann auf "Zum Ursprung verschieben". Los geht's.

Bowie Chang
quelle
0

Dies passiert mir, da ich ein Tag mit dem gleichen Zweig wie der Zweig hatte und versucht habe, den Zweig auf Remote zu verschieben.

Buminda
quelle
0

In meinem Fall war das Problem, dass es (seltsamerweise) keinen Zweig namens Master gab. Ich habe das Repository von Github genommen.

D063520
quelle
0

Ich habe den vorhandenen Tippfehler-Zweig 'evelop' gepusht, den ich noch nicht ausgecheckt hatte, und stattdessen wollte ich einen Zweig namens 'Envelope' pushen. Der Zweig muss also vorhanden sein / bei lokaler Arbeitskopie auschecken, um natürlich diesen Fehler zu pushen, um keinen Tippfehler zu machen.

FentomX1
quelle