it-swarm.com.de

Git: Wie kann man Commits, bei denen Merge-Commit dazwischen liegt, quetschen?

Ich arbeite an einem Feature-Zweig.

  1. Mehrere Commits gemacht. Gequetschte Commits.
  2. Änderungen in den Remote-Zweig verschoben. Bekam Konflikte.
  3. Änderungen vom Master zusammengeführt, Konflikte im Feature-Zweig behoben. (git fetch Origin master> FETCH_HEAD zusammenführen> Konflikte manuell lösen> git commit> git Push)
  4. Ich habe noch einen Commit gemacht.

Der aktuelle Commit-Verlauf sieht also so aus. Von aktuell zu alt:

  1. begehen 3
  2. m yyy (zusammengeführt) festschreiben
  3. begehen 2

Wie zerdrücke ich mehr als 3 Commits in 1, bevor ich meinen Feature-Zweig zum Master zusammenführe?

41
Miral

Sie können rebase -i Mit dem übergeordneten Element von commit 2 (D. H. Dem Commit für master, von dem Sie verzweigt sind) beginnen. Sie müssen Konflikte wahrscheinlich erneut lösen, wenn Sie dazu kommen zum Merge Commit.

Also, wenn deine Geschichte so aussieht

  * D commit 3 (HEAD)
  * M merge
 /|
| * C commit 2
* | B commit on master
|/
* A (master)

Beginnen Sie mit git rebase -i A. Es wird eine Liste von Commits angezeigt, die sowohl master als auch your_branch Enthält, jedoch nicht den Merge-Commit. pick der erste (B oder C, abhängig vom Timing) und squash der Rest.

23
Kristján

In meinem Fall habe ich angefangen, mit einem Zweig zu arbeiten, der mehrere Festschreibungen, dann eine Zusammenführung mit dem Haupt-/Quellzweig, dann weitere Festschreibungen und ich wollte alle Festschreibungen quetschen.

error: commit ist eine Zusammenführung, es wurde jedoch keine Option -m angegeben.

-> C1-> C2-> M (mit Quellenzweig zusammenführen) -> C3-> C4

Es gibt wahrscheinlich einen besseren Weg (und ich freue mich darauf zu lernen), aber am Ende habe ich nach vielem Lesen und Ausprobieren einen Kopierzweig als Referenz erstellt und dann den aktuellen Zweig auf C1 zurückgesetzt.

zurücksetzen --hard (C1 Hash)

dann Kirschpflücken C2, C3, C4, dann Quetschen, dann Umbasieren ... was ergibt:

M-> C

(Nur ein Commit, das mit Source neu basiert wurde!)

Ich hoffe das hilft jemand anderem mit dem gleichen Problem.

0
user6096790