2017-03-10 4 views
0

gegangen Ich hatte drei commits in Git gemacht. So was.Änderungen, nachdem GIT Rebase

asaurab-3.desktop% git lg 
* 931b405 - (HEAD -> saurabh, origin/saurabh) minor fixes (6 minutes ago) <Saurabh Kumar Agarwal> 
* 838d366 - adding upload and download functionality (15 minutes ago) <Saurabh Kumar Agarwal> 
* 0d62348 - first commit (7 days ago) <Saurabh Kumar Agarwal> 
* 4797854 - (origin/mainline, origin/HEAD, mainline) commit (2 weeks ago) <Perforce Administrator> 

Ich wollte diese drei Commits Squash so habe ich

git rebase -i HEAD~3 

Es öffnete ein Fenster, mit drei Commits. Ich ersetzt alle drei pick zu squash und bestehen aus Editor :wq! .

Ich habe die Fehlermeldung

Cannot 'squash' without a previous commit 

Nun meine git lg zeigt

* 4797854 - (HEAD, origin/mainline, origin/HEAD, mainline) commit (2 weeks ago) <Perforce Administrator> 

Alle meine Änderungen gegangen verwenden. Wie kann ich sie zurückbekommen?

Dies ist die Ausgabe von git status

git status 
interactive rebase in progress; onto 4797854 
No commands done. 
Next commands to do (3 remaining commands): 
    squash 0d62348 first commit 
    squash 838d366 adding upload and download functionality 
    (use "git rebase --edit-todo" to view and edit) 
You are currently editing a commit while rebasing branch 'saurabh' on '4797854'. 
    (use "git commit --amend" to amend the current commit) 
    (use "git rebase --continue" once you are satisfied with your changes) 

Antwort

1

Antwort auf die Frage ist nur in Git-Status.

ich

tat Früher
git rebase --edit-todo 

Dann habe ich Squash in allen drei so dieser Fehler kam. Ich wählte für den ersten Einsatz und dann Squash für andere zwei Commits. dann habe ich meine Änderungen gespeichert.

Dann habe ich

git rebase --continue 

Es ist mein Problem gelöst.

1

Ihres Fütterungsmaterial ist noch nicht abgeschlossen. Es ist kein Fehler, nur eine normale Information beim Quetschen. Führen Sie rebase --continue aus, um die Rebase zu beenden.

$ git rebase --continue  # repeat the command until rebase complete 

Alle sind meine Änderungen gegangen. Wie kann ich sie zurückbekommen?

OR, können Sie das Fütterungsmaterial und Kasse zu Ihrem gewünschten begehen abbrechen. Sie können zwischen git reflog Ausgabe wählen.

$ git rebase --abort  # abort/stop the rebase 

$ git reflog    # copy your desired commit hash 
$ git checkout <commit> # I guess here, desired commit = 931b405 

nun eine Niederlassung

$ git checkout -b new-branch 

erstellen Sie auch den letzten 3 Festschreibungen von soft reset zerquetschen können.

$ git reset --soft HEAD~3 
$ git add . 
$ git commit -m 'Squash last three commits' 

$ git push origin HEAD  # push to remote 
+0

Wahrscheinlich macht 'git rebase --abort' mehr Sinn. Wenn das Rebase fehlerhaft ist, weil das interaktive Skript unterbrochen ist, ist es unwahrscheinlich, dass ein "Fortsetzen" einen großen Unterschied macht. –

+0

Ja, offensichtlich würde 'git rebase --abort' die Rebasing stoppen und zurück zum vorherigen funktionierenden Baum. Aber ich denke hier ist es kein Fehler (nur regelmäßige Informationen während der Umlagerung)! –

+1

Ja @sajibkhan, Es ist kein Fehler. Es ist regelmäßig Informationen beim Rebasing. Ich habe einfach ausgerastet und git log angesehen. –