Git Push macht nichts (alles aktuell)


100

Ich versuche ein Git-Repository auf GitHub zu aktualisieren. Ich habe eine Reihe von Änderungen vorgenommen, sie hinzugefügt, mich verpflichtet und dann versucht, eine Änderung vorzunehmen git push. Die Antwort sagt mir, dass alles auf dem neuesten Stand ist, aber eindeutig nicht.

git remote show origin

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

Warum teilt Git mir mit, dass das Repository auf dem neuesten Stand 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)

Antworten:


142

git pushpusht nicht alle Ihre lokalen Filialen: Wie würde es wissen, zu welchen Remote-Filialen sie pushen sollen? Es werden nur lokale Zweige übertragen, die so konfiguriert wurden, dass sie an einen bestimmten Remote-Zweig übertragen werden.

Auf meiner Version von Git (1.6.5.3), wenn ich laufe git remote show origin tatsächlich gedruckt, 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 könnte drängen, masterohne mir darüber Sorgen zu machen!

Wenn Sie git clonestandardmäßig Ihren lokalen masterZweig so einrichten, dass er zum masterZweig der Fernbedienung (lokal als origin/master) bezeichnet wird, wenn Sie also nur einen Commit durchführenmaster , git pushwerden Ihre Änderungen durch einen einfachen immer zurückgeschoben.

Von dem von Ihnen geposteten Ausgabeausschnitt befinden Sie sich jedoch in einem Zweig namens develop , der vermutlich nicht so eingerichtet wurde, dass er auf irgendetwas pusht. Also git pushohne Argumente werden nicht schieben Commits auf diesem Zweig.

Wenn dort "Alles auf dem neuesten Stand" steht, bedeutet dies, dass "alle Filialen, die Sie mir gesagt haben, wie man pusht, auf dem neuesten Stand sind".

Frage: Wie kann ich meine Commits vorantreiben?

Wenn Sie Ihre Änderungen von developin übernehmen möchten, origin/mastersollten Sie sie wahrscheinlich in Ihrem lokalen masterVerzeichnis zusammenführen und dann Folgendes drücken:

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

Wenn Sie einen developZweig auf der Fernbedienung erstellen möchten , trennen Sie von masterund geben Sie Argumente an git push:

git push origin develop

Das wird: einen neuen Zweig auf der Fernbedienung erstellen, der aufgerufen wird develop; und bringen Sie diese Niederlassung mit Ihrer örtlichen developNiederlassung auf den neuesten Stand ; und Satz developzu drücken , um origin/developso , dass in Zukunft, git pushohne Argumente werden Push developautomatisch.

Wenn Sie Ihr lokales Netzwerk developan einen Remote-Zweig weiterleiten möchten, der etwas anderes heißt als develop , können Sie sagen:

git push origin develop:something-else

Dieses Formular wird jedoch nicht so eingerichtet develop, dass es origin/something-elsein Zukunft immer verwendet wird. Es ist eine One-Shot-Operation.


Vielen Dank, Ihr Git-Push-Ursprung hat sich entwickelt: Etwas anderes hat die Frage beantwortet, die ich eine Weile nicht bekommen konnte.
Antroid

1
In meinem Fall git push origin xwurde Zweig x immer noch nicht eingerichtet, um in Zukunft gepusht zu werden. Es war auf eine bestimmte Push-Spezifikation im .gitconfig [remote "origin"]Abschnitt zurückzuführen, die das Verhalten von Git verursachte.
Raman

27

Dies ist mir passiert, als meine SourceTree-Anwendung während der Bereitstellung abgestürzt ist. Und auf der Kommandozeile schien es, als wäre die vorherige git addbeschädigt worden. Wenn dies der Fall ist, versuchen Sie:

git init
git add -A
git commit -m 'Fix bad repo'
git push

Beim letzten Befehl müssen Sie möglicherweise den Zweig festlegen.

git push --all origin master

Denken Sie daran, dass dies ausreicht, wenn Sie keine Verzweigung oder ähnliches durchgeführt haben. Stellen Sie in diesem Fall sicher, dass Sie auf den richtigen Zweig wie drücken git push origin develop.


15

Versuchen:

git push --all origin

Dadurch werden die Commits dazu gedrängt, Zweige im Repo zu trennen, nicht von einem Zweig in den Master.
Sreedevi J

13

Bitte versuchen Sie, zum letzten Commit zu gehen, und tun Sie es dann git push origin HEAD:master.


1
Das hat tatsächlich funktioniert. Möchten Sie erklären, warum es funktioniert hat?
René Nyffenegger

Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
Text

Arbeitete auch für mich
Jerad Rutnam

Ich habe verglichen, wie mein Repo konfiguriert ist und alle Zweige gleich aussahen. In einem Zweig konnte ich jedoch nicht einfach Folgendes verwenden git push: / Das funktionierte auch für mich : git push origin HEAD:my_branch_name.
iaforek

6

In meinem Fall hat keine andere Lösung funktioniert. Ich musste eine Sicherungskopie der neuen geänderten Dateien (angezeigt mit git status) erstellen und a ausführen git reset --hard. Dadurch konnte ich mich mit dem Remote-Server neu ausrichten. Hinzufügen neuer geänderter Dateien und Ausführen

git add .
git commit -am "my comment"
git push

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


4

Im Moment sieht es so aus, als ob Sie sich im Entwicklungszweig befinden. Haben Sie einen Entwicklungszweig für Ihre Herkunft? Wenn nicht, versuchen Sie es git push origin develop.git pushwird funktionieren, sobald es über einen Entwicklungszweig auf Ihrer Herkunft weiß.

Als weitere Lektüre würde ich mir die git-push-Manpages ansehen , insbesondere den Beispielabschnitt.


3

Um genau zu sein, wenn Sie etwas zum Master zusammenführen möchten, können Sie die folgenden Schritte ausführen.

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

Es ist eine gängige Praxis beim Erstellen eines Pull-Anforderungsmodells für einen neuen lokalen Zweig, und dieser Zweig wird dann an einen Remote-Zweig gesendet. Dazu müssen Sie angeben, wohin Sie Ihre Änderungen per Fernzugriff übertragen möchten. Sie können dies tun, indem Sie zum Zeitpunkt des Pushs die Fernbedienung erwähnen.

git push origin develop // It will create a remote branch with name "develop".

Wenn Sie einen anderen Zweig als Ihren lokalen Zweigstellennamen erstellen möchten, können Sie dies mit dem folgenden Befehl tun.

git push origin develop:some-other-name

2

Vielen Dank an Sam Stokes. Nach seiner Antwort können Sie das Problem auf unterschiedliche Weise lösen (ich habe diesen Weg verwendet). Nach dem Aktualisieren Ihres Entwicklungsverzeichnisses sollten Sie es neu initialisieren

git init

Anschließend können Sie Updates festschreiben und an den Master senden


1
Vielen Dank! In meinem Fall geben Sie: ein git initund öffnen Sie eine neue Befehlsregisterkarte. git push origin branch_name
Geben Sie Folgendes ein

2

Das ist mir passiert, als ich ^Cmitten in einem git pushGitHub war. GitHub zeigte jedoch nicht, dass die Änderungen vorgenommen wurden.

Um dies zu beheben, habe ich eine Änderung an meinem Arbeitsbaum vorgenommen, mich verpflichtet und dann erneut gepusht. Es hat einwandfrei funktioniert.


2

Das ist mir passiert. Ich habe die Änderungen einfach erneut festgeschrieben, und dann wurde sie vorangetrieben.


2

Ich habe viele Methoden ausprobiert, einschließlich der hier definierten. Was ich habe ist,

  • Stellen Sie sicher, dass der Name des Repositorys gültig ist. Der beste Weg ist, den Link von der Repository-Site zu kopieren und in Git Bash einzufügen.

  • Stellen Sie sicher, dass Sie die ausgewählten Dateien festgeschrieben haben.

    git commit -m "Your commit here"
    
  • Wenn beide Schritte nicht funktionieren, versuchen Sie es

    git push -u -f origin master


1

Stattdessen können Sie Folgendes versuchen. Du musst nicht gehenmaster ; Sie können die Änderungen direkt aus Ihrem Zweig selbst erzwingen.

Wie oben erläutert, ändern Sie beim Rebase den Verlauf Ihres Zweigs. Wenn Sie versuchen, git pushnach einer Rebase eine Normalisierung durchzuführen, lehnt Git dies ab, da es keinen direkten Pfad vom Commit auf dem Server zum Commit in Ihrem Zweig gibt. Stattdessen müssen Sie das Flag -foder --forceverwenden, um Git mitzuteilen, dass Sie wirklich wissen, was Sie tun. Es wird dringend empfohlen, die push.defaultKonfigurationseinstellung auf einfach zu setzen, was in Git 2.0 die Standardeinstellung ist. Führen Sie Folgendes aus, um sicherzustellen, dass Ihre Konfiguration korrekt ist:

$ git config --global push.default simple

Sobald es richtig ist, können Sie einfach ausführen:

$ git push -f

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

Weitere Informationen finden Sie unten unter So erstellen Sie eine Pull-Anforderung neu .


0

Stellen Sie außerdem sicher, dass Sie zum richtigen Zweig wechseln.


0

Dies passierte mir, als ich versuchte, von einem neuen Zweig zu pushen, und ich benutzte git push origin masterstattdessen. Sie sollten entweder:

  • Verwenden: git push origin your_new_branch Wenn Sie möchten, dass dieser Zweig auch im Remote-Repo auftritt.
  • Andernfalls checken Sie zu Ihrem Master-Zweig aus, um Dinge zusammenzuführen, und drücken Sie dann von Master zu Git Repo mit git merge origin master.

Fazit: Der Punkt hier ist, dass Sie überprüfen sollten, wo Sie den zweiten Parameter für die Git-Zusammenführung anbieten . Wenn Sie sich also im Master befinden, verwenden Sie master als zweiten Parameter, wenn Sie sich in der new_branch befinden. Verwenden Sie diesen als zweiten Parameter, wenn Sie diesen Zweig im Remote-Repo behalten möchten. Andernfalls wählen Sie stattdessen die zweite Option oben.


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.