231 Stimmen

Die ersten beiden Übertragungen eines Git-Repositorys zusammenfassen?

Angenommen, Sie haben eine Historie, die die folgenden drei Übertragungen enthält A, B y C :

A-B-C

Ich möchte die beiden Übertragungen kombinieren A y B zu einer Verpflichtung AB :

AB-C

Ich habe versucht

git rebase -i A

der meinen Editor mit folgendem Inhalt öffnet:

pick e97a17b B
pick asd314f C

Ich ändere dies in

squash e97a17b B
pick asd314f C

Dann sagt Git 1.6.0.4:

Cannot 'squash' without a previous commit

Gibt es eine Möglichkeit oder ist das einfach unmöglich?

0 Stimmen

0 Stimmen

1voto

kch Punkte 73753

In einer verwandten Frage ist es mir gelungen, einen anderen Ansatz für die Notwendigkeit zu finden, die erste Übergabe zu unterdrücken, nämlich, sie zur zweiten zu machen.

Wenn Sie daran interessiert sind: git: Wie fügt man einen Commit als ersten ein und verschiebt alle anderen?

0 Stimmen

Wäre es besser, wenn die Antwort auch hier wiederholt würde? Ich bin mir nicht sicher.

0voto

Sumit Punkte 29

Git-Befehl für Trupp: git rebase -i HEAD~[Anzahl der Übertragungen]

Nehmen wir an, Sie haben folgenden Git-Commit-Verlauf:

Pick 5152061 feat: Unterstützung für das Speichern von Bildern hinzugefügt. (A)
pick 39c5a04 Fix: Fehlerkorrekturen. (B)
pick 839c6b3 fix: Konflikt behoben. (C)

Wenn Sie nun A und B zu AB zerquetschen wollen, führen Sie die folgenden Schritte aus:

Pick 5152061 feat: Unterstützung für das Speichern von Bildern hinzugefügt. (A)
s 39c5a04 Korrektur: Fehlerkorrekturen. (B)
pick 839c6b3 fix: Konflikt behoben. (C)

Hinweis: Für squash commit können wir squash oder s verwenden. Das Endergebnis wird sein:
Pick 5152061 feat: Unterstützung für das Speichern von Bildern hinzugefügt. (AB)
pick 839c6b3 fix: Konflikt behoben. (C)

-1voto

Bombe Punkte 77831

Sie müssen ein wenig Befehlszeilenzauberei betreiben.

git checkout -b a A
git checkout B <files>
git commit --amend
git checkout master
git rebase a

Damit sollten Sie einen Zweig haben, der AB und C als Übertragungen enthält.

0 Stimmen

Da die alten und neuen initialen Commits keinen gemeinsamen Vorgänger haben, kann es zu unnötigen Konflikten kommen, da Git versucht, die gesamte Geschichte von master auf a anzuwenden, obwohl sie einen gemeinsamen Baum haben. Mit der Option --onto für git rebase kannst du git mitteilen, an welcher Stelle die Anwendung beginnen soll.

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