2015-02-10 10 views

Antwort

50

Die Antwort ist da, Git sagt Ihnen, zuerst zu holen.

Wahrscheinlich hat jemand anderes schon gedrängt, um zu meistern, und Ihr Commit ist zurück. Daher müssen Sie den Changeset holen, zusammenführen und dann können Sie erneut drücken.

Wenn Sie nicht (oder noch schlimmer, wenn Sie es mit der Option --force erzwingen), können Sie den Commit-Verlauf durcheinander bringen.

EDIT: Ich komme näher auf den letzten Punkt, da ein Mann hier nur den sehr schlechten Tipp der Verwendung der --force Option gab.

Da git ein DVCS ist, arbeiten im Idealfall viele andere Entwickler an demselben Projekt wie Sie und verwenden dasselbe Repository (oder einen Zweig davon). Wenn Sie Ihren Änderungssatz stark überschreiben, stimmt Ihr Repository nicht mit dem der anderen überein, da "Sie den Verlauf neu geschrieben haben". Du wirst andere unglücklich machen und das Repository wird leiden. Wahrscheinlich wird auch ein Kätzchen auf der Welt weinen.

TL; DR

  1. Wenn Sie lösen wollen, holen erste (und dann verschmelzen).
  2. Wenn Sie hacken möchten, verwenden Sie die Option --force.

Sie fragten nach dem ehemaligen, obwohl. Gehen Sie für 1) immer, auch wenn Sie git immer selbst verwenden, weil es eine gute Übung ist.

+0

Kann nicht wichtige Änderungen in lokalen Dateien löschen zu holen? –

+0

Es ändert sich nicht nach einem Abruf – dhein

+0

@dhein, wie ich schrieb, der Abruf muss gefolgt sein von einer Zusammenführung - der Punkt ist, dass Sie den lokalen Baum mit dem Remote-Baum "ausrichten" müssen (daher mit der Zusammenführung) - aber danke, ich schrieb es in der TL; DR auch – linuxbandit

3

diesen git Befehl

git push origin master --force 

oder kurz -f Kraft Versuchen

git push origin master -f

+0

Danke @ user1865618, git Push-Ursprungs-Master --force. Dieser Befehl hat meine Zeit gerettet –

+0

Es ist lustig, dies zu lesen, nachdem ich andere Antworten gelesen habe und gesagt habe: "Tu das nicht, es sei denn, du weißt, was du tust". :-) – Zeth

+0

Dies überschreibt Git Push Restriktion. Nicht für Teamarbeit empfohlen.Von der git push-Dokumentation: _Wenn jemand anders während des Umbaus auf Ihre ursprüngliche Geschichte gebaut hat, kann die Spitze der Verzweigung auf der Fernbedienung mit ihrem Commit voranschreiten, und blindes Drücken mit --force wird_ ** ihre Arbeit verlieren **. – Casey

16

Sie git pull verwenden sollten, tun das ist Befehl ein git fetch und die git merge als nächstes tun.

Wenn Sie einen git push origin master --force Befehl verwenden, haben Sie möglicherweise Probleme in der Zukunft.

+0

Stimmt es, dass Sie --force nur verwenden sollten, wenn Sie der Einzige im Projekt sind und Sie frustriert sind, Ihren ersten Push auszuführen? – Chrips

6

Pull ist immer der richtige Ansatz, aber eine Ausnahme könnte sein, wenn Sie versuchen, ein Nicht-Git-Dateisystem in ein Github-Repository zu konvertieren. Dort müssten Sie das erste Commit erzwingen.

git init 
git add README.md 
git add . 
git commit -m "first commit" 
git remote add origin https://github.com/userName/repoName.git 
git push --force origin master 
+0

funktioniert für mich, ich habe wieder ein neues Projekt (gleich Repo) gestartet und ich wollte es ersetzen. – ucotta

15

Versuch:

git fetch origin master 
git merge origin master 

Nach diesen Code schrieb ich andere Fehler empfangen: (nicht vorspulen)

Ich schreibe diesen Code:

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

Und löste mein Problem

+0

Das gleiche für mich. Das hat mein Problem gelöst. Es gibt ein paar Warnungen. Ich habe ein Unter-Repository durcheinander gebracht, aber es damit gelöst: http://stackoverflow.com/questions/19584255/what-does-a-grey-icon-in-remote-github-mean –

+0

Danke Es funktioniert für mich – core114

0

It ' s wahrscheinlich, dass jemand anderes (z. Ihr Kollege) hat Commits auf origin/master, die nicht in Ihrem lokalen master Zweig sind, und Sie versuchen, einige Commits von Ihrem lokalen Zweig auf den Server zu schieben. In 99% der Fälle haben Sie zwei Möglichkeiten, wenn Sie ihre Arbeit nicht löschen möchten:

2) Fügen Sie ihre Änderungen in Ihren lokalen Zweig ein, und drücken Sie dann das zusammengeführte Ergebnis. git checkout master git pull # resolve conflicts here git push

(Beachten Sie, dass git pull im Wesentlichen nur ein git fetch und ein git merge in diesem Fall.)

1) Ihre lokale Niederlassung Rebase, so dass es aussieht wie Ihr Kollege ihre Commits zuerst gemacht, und dann hat Sie Ihre verpflichtet. Dies hält den Commit-Verlauf nett und linear - und vermeidet ein "Merge-Commit". Wenn Sie jedoch Konflikte mit den Änderungen Ihres Kollegen haben, müssen Sie diese Konflikte möglicherweise im schlimmsten Fall für jedes Ihrer Commits lösen (und nicht nur einmal). Im Wesentlichen ist dies für alle anderen schöner, aber mehr Aufwand für Sie. git pull --rebase # resolve conflicts here git push

(Beachten Sie, dass git pull --rebase ist im Wesentlichen ein git fetch und ein git rebase origin/master.)

0

Manchmal kommt es vor, wenn Sie doppelte Dateien normalerweise Art README.

0

können Sie den folgenden Befehl verwenden: Erster Klon eine neue Kopie Ihres Repo, die --mirror Flagge mit:

$ git clone --mirror git://example.com/some-big-repo.git 

dann entsprechend die Codes folgen:

Adding an existing project to GitHub using the command line

Auch wenn das nicht funktioniert, können Sie einfach codieren:

$ git push origin master --force 

oder

$ git push origin master -f