772 Stimmen

Wie kann man alle Git-Commits zu einem zusammenfassen?

Wie drückst du dein gesamtes Repository auf den ersten Commit zusammen?

Ich kann zum ersten Commit neu basieren, aber dann hätte ich 2 Commits. Gibt es eine Möglichkeit, auf den Commit vor dem ersten zu verweisen?

43 Stimmen

@innaM - Es ist der ursprüngliche Commit, der den Git hervorgebracht hat. (Hofft, dass der Humor gut genug durch das Internet übertragen wird).

14 Stimmen

Für diejenigen, die später zu dieser Frage kommen, achten Sie darauf, die modernere Antwort zu verwenden.

1 Stimmen

Verwandt, aber kein Duplikat (--root ist tatsächlich nicht die beste Lösung zum Zusammenfassen aller Commits, wenn es viele davon gibt, die zusammengefasst werden müssen): Kombinieren der ersten beiden Commits eines Git-Repositorys?.

1voto

javabrett Punkte 6304

Diese Antwort verbessert ein paar der obigen (bitte wählen Sie sie hoch), unter der Annahme, dass Sie neben der Erstellung des einen Commits (keine Eltern keine Geschichte), auch alle Commit-Daten dieses Commits beibehalten möchten:

  • Autor (Name und E-Mail)
  • Erstellungsdatum
  • Commiter (Name und E-Mail)
  • Commit-Datum
  • Commit-Log-Nachricht

Natürlich wird sich die Commit-SHA des neuen/einzigen Commits ändern, da es eine neue (nicht-)Geschichte darstellt und ein elternloser/Wurzel-Commit wird.

Dies kann erreicht werden, indem man `git log` liest und einige Variablen für `git commit-tree` setzt. Unter der Annahme, dass Sie einen einzelnen Commit von `master` in einem neuen Branch `one-commit` erstellen möchten, die obigen Commit-Daten beibehaltend:

git checkout -b one-commit master ## neuen Branch erstellen, um zurückzusetzen
git reset --hard \
$(eval "$(git log master -n1 --format='\
COMMIT_MESSAGE="%B" \
GIT_AUTHOR_NAME="%an" \
GIT_AUTHOR_EMAIL="%ae" \
GIT_AUTHOR_DATE="%ad" \
GIT_COMMITTER_NAME="%cn" \
GIT_COMMITTER_EMAIL="%ce" \
GIT_COMMITTER_DATE="%cd"')" 'git commit-tree master^{tree} <

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X