Ich habe Folgendes im To-Do-Text von git rebase -i HEAD~2
:
pick 56bcce7 Closes #2774
pick e43ceba Lint.py: Replace deprecated link
# Rebase 684f917..e43ceba onto 684f917 (2 command(s))
#
...
Wenn ich nun versuche, das erste ( 56bcce7
) zu quetschen und das zweite durch Hinzufügen von "s" vor dem ersten auszuwählen, wird folgende Fehlermeldung angezeigt:
Cannot 'squash' without a previous commit
Kann mir jemand erklären, was es bedeutet und wie ich es mache?
Ich möchte zerquetschen die erste commit ( 56bcce7
) und „wählen und umformulieren“ , um die zweite ( e43ceba
) verpflichten
Antworten:
Die interaktive Rebase zeigt Commits in umgekehrter Reihenfolge an, wie Sie es bei der Verwendung gewohnt sind
git log
.git rebase -i
Wiederholt die ausgewählten Commits in der genauen Reihenfolge (von oben nach unten), in der sie in der gespeicherten Rebase-Anweisungsdatei aufgeführt sind. Beim Squashing wird das zum Squashing ausgewählte Commit mit dem Commit kombiniert, das in der (bearbeiteten) Liste davor steht, dh dem Commit aus der vorherigen Zeile. In Ihrem Fall gibt es kein vorheriges Commit für56bcce7
. Sie müssen einen der folgenden Schritte ausführengit rebase -i HEAD~3
(wenn Sie quetschen wollen56bcce7
in684f917
)Wenn Sie meinen , kombinieren
56bcce7
mite43ceba
unde43ceba
hängt nicht56bcce7
, dann einfach Neuordnungs sie:UPDATE : Gus 'Antwort unten schlägt einen besseren Weg vor, dasselbe zu tun, ohne die beiden Commits neu zu ordnen:
Dadurch werden die beiden Commits zu einem zusammengefasst. Wenn die interaktive Rebase nach einer umformulierten Festschreibungsnachricht für fragt
56bcce7
, geben Sie die Festschreibungsnachricht an , die die Vereinigung von56bcce7
und beschreibte43ceba
.quelle
56bcce7
ine43ceba
. Wie mache ich hier den ersten Schritt?Ich hatte ein ähnliches Problem, das ich wie folgt gelöst habe:
Dies ist die Commit-Gruppe, die ich quetschen wollte:
Wie Sie sehen können, wollte ich nein. 4, aber 1, 2 und 3 hatten zuvor keine Verpflichtung, sich hineinzuquetschen . Daher kann der Squash nicht ohne vorherigen Commit- Fehler ausgeführt werden.
Meine Lösung bestand darin, die
r
Option für zu verwenden# r, reword = use commit, but edit the commit message
Meine Commit-Liste sah also so aus:
Nach dem Speichern bat mich die interaktive Shell um die Neuformulierung des ausgewählten Commits.
Danach führte mein Festschreibungsprotokoll zu einem einzelnen Festschreiben, was zu einem saubereren Festschreibungsverlauf führte.
quelle
git rebase --edit-todo
diese Antwort verweisen und dann behebengit rebase --continue
Ich hatte dieses Problem und der Grund, warum es in meinem Fall passiert ist, war, dass Sie ältere Commits nicht auf ein neues Commit quetschen können. Hier ist ein Beispiel, das besagt, dass Sie 3 Commits haben:
Nun, wenn du sagst
git rebase -i HEAD~3
und so etwas tustDies führt zu dem Fehler:
Lösung:
Wenn Sie Commits quetschen, sollten Sie die letzten Commits auf alte quetschen, nicht umgekehrt. Im Beispiel ist dies ungefähr so:
Dies wird gut funktionieren, falls Sie alle Ihre Commit-Nachrichten möchten, würde ich eine Korrektur anstelle von Squash vorschlagen .
quelle
Squash mit der umgekehrten Logik . Sie können die gewünschte Festschreibungsnachricht im späteren Schritt auswählen.
pick
Das erste Commit , für das Sie die Commit-Nachricht nicht möchten .squash
oderfixup
die Commits, die Sie zusammenführen möchten, bis zu denen, die die Commit-Nachricht enthalten, die Sie tatsächlich wollten.:x
)Lint.py: Replace deprecated link
.:x
)Hoffe es ist klarer für jemanden ✌🏽
quelle
Es ist am besten, im interaktiven Editor, der die Commits enthält, zu sagen, dass git immer von unten nach oben quetscht und man oben einen "Pick" -Eintrag hinterlassen sollte, um die Squashes von unten zu erhalten.
quelle
Ich habe gerade diesen Ansatz ausprobiert.
Dies würde die letzten 3 Commits anzeigen, die mir die Idee geben würden, was das letzte Commit ist und welches zuvor. Nun heißt es, neu zu gründen,
Wählen Sie das letzte Commit, auf das wir die beiden anderen drücken müssen. Die Commit-ID, die als Basis-Commit ausgewählt wird, lautet wie folgt:
Ändern Sie die beiden anderen Festschreibungs-IDs in:
oder einfach,
quelle
Ich habe dieses Problem auch schon jetzt getroffen, das ist nur nachlässig. Sie können das Problem wie folgt lösen: Wenn Sie versuchen, das erste (56bcce7) zu quetschen und das zweite auszuwählen, sollten Sie aber "s" vor der zweiten Zeile hinzufügen nicht der erste. Sie können auch auf die nächste Website verweisen: http://backlogtool.com/git-guide/en/stepup/stepup7_5.html
quelle