2013-07-16 9 views
7

Ich möchte zwei letzte Commits mit Commit-Nachrichten "erste" und "zweite" Squash. Zunächst ziehe ich Master dann verwende ich den Befehlmöchte mehrere Commits in GitHub Squash

git rebase -i HEAD~2 master 

Es zeigt mir, beide wie dies in einem Editor verpflichtet:

pick first 
pick second 

Dann wechsle ich diesen Editor als:

pick first 
squash second 

Nach dem Speichern die Änderungen, die ich diese Nachricht erhalten habe:

Successfully rebased and updated refs/heads/master. 

Es hat alles im Remote-Master geändert. Um diese Änderungen zu übernehmen ich die git push Befehl und bekam folgende Fehlermeldung:

To https://github.com/aneelatest/GITtest.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to 'https://github.com/test/GITtest.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. 

Dann wieder ich den git pull Befehl ausführen und es origin master verschmelzen und machen eine andere begehen mit dieser Nachricht begehen:

Merge branch 'master' of https://github.com/aneelatest/GITtest 

Danach, wenn ich git push laufen lasse, zerquetsche ich die beiden Commits mit der Nachricht "first" in eins. Das Problem ist, dass in entfernten Master, ich habe jetzt vier Commits:

first 
second 
Merge branch 'master' of https://github.com/test/GITtest 
first 

Wo ich einer will nur begehen, welche die zerquetscht eines mit Commit-Nachricht „ersten“. Irgendwelche Ideen, wo ich Fehler mache ??

+0

Sie müssen nicht mehr quetschen: der Besitzer kann es für Sie tun (seit März 2016): siehe http://stackoverflow.com/a/36377439/6309 – VonC

Antwort

9

git rebase schreibt den Verlauf neu, weil die Commits geändert wurden. Es ist kein Problem, wenn die genannten Commits nicht an ein Remote-Repository gesendet wurden, aber hier wurde die Remote zuvor mit den Commits gedrückt, die Sie neu geschrieben haben, sodass der Push zurückgewiesen wurde.

Wenn Sie von GitHub gezogen haben, hat es beide Geschichten zusammengeführt und Ihre Squash-Commit angewendet, daher das Durcheinander.

Fazit: wenn Sie neu zu schreiben Commits möchten, die bereits gedrückt wurde, haben Sie zwei Möglichkeiten:

  • tun es nicht
  • eine git push --force tun, die Geschichte auch auf der Fernbedienung neu schreiben wird, und erzähle den Leuten, dass du die Geschichte umgeschrieben hast, damit sie beim nächsten Mal seltsame Dinge sehen.
Verwandte Themen