Ich versuche, eine Reihe von Commits zu quetschen - HEAD to HEAD ~ 3. Gibt es eine schnelle Möglichkeit, dies zu tun, oder muss ich rebase --interactive verwenden?
git
interactive
rebase
squash
Phillip
quelle
quelle
Antworten:
Stellen Sie dann sicher, dass Ihr Arbeitsbaum sauber ist
quelle
git reset --soft HEAD~3 && git commit -m "my message"
git config alias.mysquash '!f(){ git reset --soft HEAD~$1 && git commit ${2:+-m "$2"}; };f'
.git mysquash 3 'some message'
wird funktionieren, aber ich habe es auch sogit musquash 3
angepasst, dass das Flag -m vollständig weggelassen wird, sodass Siegit commit
in diesem Fall die interaktive Benutzeroberfläche erhalten.Ich persönlich mag die Lösung von wilhelmtell :
Ich habe jedoch einen Alias mit einer Fehlerprüfung erstellt, damit Sie dies tun können:
Ich empfehle, Aliase einzurichten, in denen tatsächlich Skripte ausgeführt werden, damit es einfacher ist, (a) Ihre Skripte zu codieren und (b) komplexere Arbeiten mit der Fehlerprüfung durchzuführen. Unten finden Sie ein Skript, das die Arbeit des Squashs erledigt, und unten ein Skript zum Einrichten Ihrer Git-Aliase.
Skript zum Quetschen (squash.sh)
Um dieses squash.sh- Skript mit einem Git-Alias zu verbinden, erstellen Sie ein anderes Skript zum Einrichten Ihrer Git-Aliase wie folgt ( create_aliases.command oder create_aliases.sh ):
quelle
$PATH
namedgit-squash.sh
einfügen und es wird automatisch als Alias bezeichnetgit squash
. Ich habe Ihre Antwort nicht geändert, nur für den Fall, dass es einen Grund gibt, dascreate-aiases.sh
Skript zu verwenden, das mir nicht bekannt ist.Um die Antwort von wilhelmtell zu ergänzen, finde ich es zweckmäßig,
HEAD~2
das Commit von zurückzusetzen und dann zu ändernHEAD~3
:Dadurch werden alle Commits mit dem
HEAD~3
Commit zusammengeführt und die Commit-Nachricht verwendet. Stellen Sie sicher, dass Sie von einem sauberen Arbeitsbaum ausgehen.quelle
Ich benutzte:
Hat ganz gut funktioniert. Versuche nur nicht, ein Commit-Protokoll mit einer Zeile zu erstellen, die mit "pick" beginnt :)
quelle
Verwenden Sie den folgenden Befehl, um die letzten 4 Commits innerhalb des letzten Commits zu quetschen:
Mit dem Alias:
Von https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig
quelle
Hier ist ein Einzeiler, um die letzten 2 Commits zu quetschen. In diesem Beispiel wird die Nachricht vom vorletzten Commit beibehalten. Sie können die Nachricht nach Ihren Wünschen ändern.
Dieser Befehl ist sehr nützlich, wenn Sie einen Alias für diesen Befehl erstellen und stattdessen den Alias verwenden.
quelle
Um alles zu zerquetschen, seit der Ast vom Meister gegabelt wurde:
quelle
--reedit-message=HEAD
verwendet die Nachricht des letzten Commits, die nicht Teil des Squashing ist . Dies ist wahrscheinlich nicht die, die Sie wollen. Um die Nachricht des ersten Commits zu erhalten, das aufgenommen werden soll , ersetzen Sie entweder (1) durchHEAD
den Hash des Commits, dessen Nachricht Sie aufnehmen möchten, oder (2) springen Sie zum ersten Commit, das aufgenommen werden soll, undgit commit --amend --reedit-message=HEAD
. Dies ist, was harmonische Antwort tut.Sie können ziemlich nah mit kommen
Dies setzt voraus, dass Sie mit einer linearen Historie auf dem Master sind. Es ist kein Squash, weil es die Zwischen-Commits verwirft. Sie müssten den neuen HEAD ändern, um die Commit-Nachricht zu ändern.
quelle
HEAD~4
als übergeordnetes Element zu haben .