Ich habe versucht, dies zu googeln, konnte aber keine zufriedenstellende Antwort finden.
Ich würde gerne wissen, was der Unterschied zwischen ist edit
und break
im interaktiven Modus von git rebase -i
.
Laut den Kommentaren edit
verwendet das Commit, stoppt aber zum Ändern, während break
hält an der angegebenen Stelle. Aber was ist dann der Unterschied zwischen:
# Scenario 1
pick a9ca198 commit #1
pick 15948d1 commit #2
edit 2dbe941 commit #3 // this will apply commit #3 and then stop.
pick 33c012d commit #4
# Scenario 2
pick a9ca198 commit #1
pick 15948d1 commit #2
pick 2dbe941 commit #3
break // this will stop after commit #3
pick 33c012d commit #4
Ich habe sie beide ausprobiert und für mich scheinen sie völlig identisch zu sein.
Das Dokumentation erwähnt:
Um die Rebase zu unterbrechen (genau wie ein “edit
” Befehl ausreichen würde, aber ohne zuerst irgendein Commit herauszupicken), verwenden Sie den “break
” Befehl.
In Ihrem Fall sind die Unterschiede:
- mit
edit
Bei Commit 3 können Sie immer noch den Dateiinhalt von Commit 3 ändern (nach Anwendung von Commit 3), Commit (immer noch Commit 3, aber modifiziert/geändert) und mit der Anwendung (Rosinenpickerei) von Commit 4 auf a fortfahren git rebase --continue
.
- mit
break
nach Commit 3 wird Commit 4 nicht angewendet. Und Commit 3 wird bereits angewendet (wenn Sie die Dateien an diesem Punkt ändern, hinzufügen und committen, würde das ein neues Commit erstellen, es sei denn, Sie tun a git commit --amend
).
Der Hauptunterschied ist also:
edit
: Wenden Sie Commit 3 an, aber Sie können das Endergebnis ändern. Fahren Sie dann fort und wenden Sie Commit 4 an.
break
: Wenden Sie Commit 4 nicht an (Wenden Sie es nur an, wenn Sie die Rebase fortsetzen)
Wenn break
alleine auf seiner Leitung ist, dann kann es ja ähnlich sein edit
bei Commit 3, vorausgesetzt, Sie tun a git commit --amend
(da Commit 3 bereits in der vorherigen Zeile ausgewählt wurde)
Aber dann die git rebase --continue
(nach dem add
+commit --amend
) wird aufhören, wegen gesagt break
.
Wie DylanYoung es in den Kommentaren ausdrückt:
Es ermöglicht Ihnen, sofort nach einem zu brechen exec
oder merge
was vorher nicht möglich war.
Notiz: break
wurde mit einem interaktiven Rebase in eingeführt Git v1.5.3-rc0, Juni 2007, Commit 1b1dce4.
Aber der Befehl break
allein ist viel neuer: Git v2.20.0-rc0, Okt. 2018, Commit 71f8246
Sehen 71f8246 übernehmen (12. Okt. 2018) und b8c0b21 übergeben (10.10.2018) von Johannes Schindelin (dscho
).
(Zusammengeführt von Junio C. Hamano — gitster
— in begehen 789b1f702.11.2018)
“git rebase -i
” eine neue Anweisung gelernt (“insn”), ‘break
‘, die der Benutzer in die To-Do-Liste einfügen kann.
Beim Drücken gibt der Befehl die Kontrolle an den Benutzer zurück.
rebase -i
: Einführung der ‘break
‘ Befehl
Das ‘edit
‘-Befehl kann verwendet werden, um einen Commit herauszupicken und dann sofort mit dem Exit-Code 0 aus der interaktiven Rebase auszusteigen, damit der Benutzer den Commit ändern, testen oder sich umsehen kann.
Manchmal wäre diese Funktionalität nützlich ohne
Rosinenpicken bei einem Commit, z. B. um die interaktive Rebase zu unterbrechen, noch bevor ein Commit Rosinen herauspickt, oder unmittelbar nach einem ‘exec
‘ oder ein ‘merge
‘.
Dieser Commit führt diese Funktionalität ein, da das brandneue ‘break
‘ Befehl.
Sehen “Gib mir eine Pause” … nun, du hast mir eine gegeben:
Ich wollte nur meine Dankbarkeit für Ihre Idee ausdrücken, das vorzustellen break
Befehl ein git rebase -i
‘s Todo-Liste. Ich benutze es alle die zeit jetzt.
Davor habe ich verwendet x bash
und am Ende tat git rebase --continue
in vielen Fällen in dieser Shell, was nicht so gut endete, als ich besagte Shell beendete (allerdings nur eine Fehlermeldung, als Folge davon brach eigentlich nichts). Diese Funktion ist ein Segen.
Oder:
‘x bash
‘ wird eine andere Shell starten, das scheint eine seltsame Sache zu sein.
Ich habe ‘x false
‘, um einen Fehler-Exit-Status zu generieren, um die Rebase zu unterbrechen und in die aktuelle Shell zu wechseln.
Dann ‘git rebase --continue
‘ wieder aufzunehmen.
b
ist viel kürzer zu tippen als x false
(und ich kann es auch nicht spät in der Nacht tippen, da x flase
obwohl das wohl den gleichen Effekt haben würde wie das Stoppen der interaktiven Rebase).
Eine Sache, die ich benutze break
dafür edit
nicht tun können, ist a fixup
und dann etwas anderes tun, z. B. eine Codeüberprüfung aktualisieren.
zB wenn ich habe
pick commit1 feature x
pick commit2 feature y
pick commit3 fixup for feature x
ich kann
$ git rebase --interactive
pick commit1 feature x
fixup commit3 fixup for feature x
break
pick commit2 feature y
dann
$ command-to-update-cr
$ git rebase --continue
Beachten Sie, dass Sie verwenden könnten exec
für den gleichen Zweck, aber ich bevorzuge die Kontrolle, die ich erhalte, wenn ich in die Befehlszeile eingefügt werde.
In dem von Ihnen angegebenen Beispiel haben Sie Recht. Verwenden break
nach pick
ist identisch mit nur verwenden edit
. Es ist nicht sinnvoll zu verwenden break
Hier entlang. Wo break
nützlich wird, wenn es folgt squash
, fixup
, merge
oder exec
.
Dies wird in erläutert die Commit-Nachricht, die die eingeführt hat break
Befehl:
rebase -i: Einführung des ‘break’-Befehls
Das edit
Der Befehl kann verwendet werden, um einen Commit herauszupicken und dann sofort mit dem Exit-Code 0 aus dem interaktiven Rebase auszusteigen, damit der Benutzer den Commit ändern, testen oder sich umsehen kann.
Manchmal wäre diese Funktionalität nützlich ohne
Rosinenpicken bei einem Commit, z. B. um die interaktive Rebase zu unterbrechen, noch bevor ein Commit oder unmittelbar danach ein Rosinenpicken erfolgt exec
oder ein
merge
.
Dieser Commit führt diese Funktionalität als das Spanking New ein break
Befehl.
Seltsam, ich habe die nicht
break
Option auf Git-Version 2.17.1– Michael B.
18. Juli 2020 um 14:13 Uhr
@MichaelB. Ach vielleicht
break
ist ein Befehl, der erst kürzlich hinzugefügt wurde. Meine Version ist 2.24.3 (Apple Git-128).– Seminpark
18. Juli 2020 um 14:14 Uhr
@SeminPark Ja, siehe meine bearbeitete Antwort.
– VonC
18. Juli 2020 um 14:21 Uhr