2010-05-29 2 views
78

Ich versuche, ein Git-Repository auf GitHub zu aktualisieren. Ich machte eine Reihe von Änderungen, fügte sie hinzu, engagierte mich dann und versuchte einen Git Push zu machen. Die Antwort sagt mir, dass alles auf dem neuesten Stand ist, aber es ist eindeutig nicht.Git Push wird nichts tun (Alles auf dem neuesten Stand)

git remote show origin 

antwortet mit dem Repository, das ich erwarten würde.

Warum sagt Git mir, dass das Repository aktuell ist, wenn lokale Commits im Repository nicht sichtbar sind?

[searchgraph] git status 
# On branch develop 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  Capfile 
#  config/deploy.rb 
nothing added to commit but untracked files present (use "git add" to track) 

    [searchgraph] git add . 

    [searchgraph] git status 
# On branch develop 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  new file: Capfile 
#  new file: config/deploy.rb 
# 

    [searchgraph] git commit -m "Added Capistrano deployment" 
[develop 12e8af7] Added Capistrano deployment 
2 files changed, 26 insertions(+), 0 deletions(-) 
create mode 100644 Capfile 
create mode 100644 config/deploy.rb 

    [searchgraph] git push 
Everything up-to-date 

    [searchgraph] git status 
# On branch develop 
nothing to commit (working directory clean) 

Antwort

121

git push Push nicht alle Ihre lokalen Filialen: wie würde es wissen, welche Remote-Filialen sie zu schieben? Es werden nur lokale Zweige, die für den Push-Vorgang an einen bestimmten Remote-Zweig konfiguriert wurden, verschoben.

Auf meiner Version von git (1.6.5.3), wenn ich git remote show origin laufen druckt es tatsächlich heraus, welche Zweige für Push konfiguriert sind:

Local refs configured for 'git push': 
    master pushes to master (up to date) 
    quux pushes to quux (fast forwardable) 

Q. Aber ich master drücken könnte über alles, ohne sich Gedanken Dies!

Wenn Sie git clone standardmäßig setzt es Ihre lokale master Niederlassung bis zu der master Zweig der Fernbedienung drücken (lokal als origin/master bezeichnet), so dass, wenn Sie nur auf master begehen, dann ein einfaches git push immer drücken Sie die Änderungen zurück.

Von dem ausgegebenen Snippet, das Sie gepostet haben, befinden Sie sich jedoch in einem Zweig mit der Bezeichnung develop, von dem ich vermute, dass er noch nicht eingerichtet wurde, um zu irgendetwas zu gelangen. So wird git push ohne Argumente Commits auf diesem Zweig nicht schieben.

Wenn "Alles auf dem neuesten Stand" steht, bedeutet das, dass "alle Zweige, die Sie mir gesagt haben, auf dem neuesten Stand sind".

Frage: Also, wie kann ich meine Commits schieben?

Wenn das, was Sie tun möchten, ist von develop in origin/master Änderungen setzen, dann sollten Sie wahrscheinlich sie verschmelzen zu Ihrem lokalen master dann, dass Push:

git checkout master 
git merge develop 
git push    # will push 'master' 

Wenn das, was Sie wollen, ist ein develop erstellen Zweig auf der Fernbedienung, getrennt von master, dann Argumente zu git push liefern:

git push origin develop 

das wird: erstellen Sie eine neue Niederlassung auf der Fernbedienung genannt develop; und bringen Sie diesen Zweig auf den neuesten Stand mit Ihrem lokalen develop Zweig; und gesetzt develop-origin/develop, so dass in Zukunft zu schieben, git push ohne Argumente wird Push develop automatisch.

Wenn Sie Ihren lokalen develop schieben wollen eine Fern Zweig etwas andere alsdevelop genannt, dann kann man sagen:

git push origin develop:something-else 

jedoch, dass Form nicht gesetzt develop bis zu immer in Zukunft auf origin/something-else drücken; es ist eine einmalige Operation.

+2

Danke für das Detail. Ich war auf dem falschen Zweig = _ = –

+0

Vielen Dank, Ihre git push Herkunft entwickeln: etwas anderes hat Antwort auf Frage gegeben, die ich nicht für eine Weile bekommen konnte. – antroid

+0

In meinem Fall war 'git push origin x 'noch nicht eingerichtet, den Zweig x in der Zukunft zu schieben. Es war wegen einer spezifischen Pushspec im '.gitconfig'' [remote "Ursprung"] Abschnitt, der das Verhalten von git verursachte. – Raman

12

Versuchen:

git push --all origin 
+0

Dies drückt die Commits, um Zweige auf dem Repo zu trennen, nicht von einem Zweig in Master. –

-5
git push origin master 
1

Auch stellen Sie sicher, dass auf den richtigen Zweig schieben.

4

Gerade jetzt, es scheint, als ob Sie auf dem Zweig zu entwickeln sind. Haben Sie einen Entwicklungszweig auf Ihrer Herkunft? Wenn nicht, versuchen Sie git push origin develop. git push wird funktionieren, sobald es über einen entwickelnden Zweig auf Ihrem Ursprung weiß.

Als weitere Lektüre, würde ich einen Blick auf die git-push man pages, insbesondere die Beispiele Abschnitt.

+0

Sie haben Recht. Vielen Dank. –

0

Dank Sam Stokes. Laut seiner Antwort können Sie das Problem auf andere Weise lösen (ich habe diesen Weg gewählt). entwickeln Sie Ihr Verzeichnis Nach der Aktualisierung sollten Sie neu initialisieren es

git init 

Dann können Sie begehen und Updates schieben

17

Dies geschah zu mir zu meistern, wenn mein Sourcetree App während Inszenierung abgestürzt. Und in der Befehlszeile schien es, als wäre die vorherige git add beschädigt worden. Wenn dies der Fall ist, versuchen Sie Folgendes:

Oder der letzte Befehl, müssen Sie möglicherweise die Verzweigung festlegen.

git push --all origin master 

Denken Sie daran, dass dies genug ist, wenn Sie keine Verzweigung oder irgendeine dieser Art getan haben. In diesem Fall, stellen Sie sicher, dass Sie auf den richtigen Zweig drücken wie git push origin develop

1

Dies ist mir passiert, wenn ich ^C in der Mitte eines Git Push zu Github. Github zeigte jedoch nicht, dass die Änderungen vorgenommen worden waren. Um das zu beheben, habe ich eine Änderung an meinem Arbeitsbaum vorgenommen, festgeschrieben, und das nochmal gepusht. Es hat vollkommen gut funktioniert.

0

Stattdessen könnten Sie dies versuchen, Sie müssen nicht zu meistern gehen, können Sie direkt die Änderungen aus Ihrer Branche zwingen, schieben sich

Wie oben erläutert, wenn Sie ein Fütterungsmaterial tun, ändern Sie die Geschichte in Ihrer Branche. Wenn Sie also versuchen, nach einer Rebase einen normalen git push zu machen, wird Git diesen Vorgang ablehnen, da es keinen direkten Pfad vom Commit auf dem Server zum Commit in Ihrem Zweig gibt. Stattdessen müssen Sie das Flag -f oder --force verwenden, um Git zu sagen, dass Sie wirklich wissen, was Sie tun.Bei Force Pushs wird dringend empfohlen, dass Sie die push.default Konfigurationseinstellung auf simple setzen, was der Standard in Git 2.0 ist. Um sicherzustellen, dass Ihre Konfiguration korrekt ist, laufen:

$ git config --global push.default simple 

Wenn es korrekt ist, kann man einfach laufen:

$ git push -f 

Und überprüfen Sie Ihre Pull-Anfrage. Es sollte aktualisiert werden!

Zum Ende dieser LINK für weitere Details.

4

Bitte versuchen Sie es begehen dauern gehen und dann git push origin HEAD:master

+0

Das hat tatsächlich funktioniert. Möchtest du erklären, warum es funktioniert hat? –

+0

Textuell von docs: 'Schieben Sie den aktuellen Zweig auf den Master für die Remote-Referenz im Ursprungs-Repository. Diese Form ist praktisch, um den gegenwärtigen Zweig zu drücken, ohne an seinen lokalen Namen zu denken – uruapanmexicansong

1

Für meinen Fall keine anderen Lösungen gearbeitet. Ich musste ein Backup von neuen modifizierten Dateien machen (gezeigt mit git status), und einen git reset --hard laufen lassen. Dadurch konnte ich mich mit dem Remote-Server neu ausrichten. Hinzufügen neuer geänderter Dateien und Ausführen von

Hat den Trick gemacht. Ich hoffe, das hilft jemandem, als "letzte Chance" -Lösung.