2017-07-26 9 views
2

Ich versuche rebase -i ein paar Commits, die eine Weile zurück in meiner Geschichte aufgetreten. Sprich ich habe ein Protokoll wie folgt:Git: Interaktive Rebase eine Reihe von Commits

* 5e32fb0 (HEAD -> master) Add latest feature 
* 106c31a Add new feature 
* 2bdac33 Add great feature 
...100 other commits... 
* 64bd9e7 Add test 3 
* 3e1066e Add test 2 
* 26c612d Add test 1 
* 694bdda Initialize repo 

und ich möchte die 3 Test Commits quetschen. Unter diesen Umständen ist git rebase -i HEAD~106 nicht sehr praktisch. Wonach ich suche, ist etwas wie git rebase -i 64bd9e7:26c612d.

Hat Git diese Art von Verhalten, und wenn ja, wie kann ich es verwenden?

Ich habe mir this post angesehen, aber es hat meine Frage nicht beantwortet.

+2

Es ist selten, um zu versuchen ratsam, eine Änderung vorzunehmen, die in der Geschichte erreicht, dass weit zurück. Denken Sie daran, alles, was Sie in der Vergangenheit ändern, verändert auch die Gegenwart: Jedes Commit nach dem Zerquetschten wird zu einem neuen, anderen Commit kopiert, um diese neue Geschichte zu liefern. – torek

Antwort

2

Um diese drei Commits zu quetschen, müssen Sie neu schreiben Geschichte für die gesamte Repository. Das heißt, alle Commit-Hashes für Commits nach diesen Test-Commits werden geändert. Der einfachste Weg, es zu tun, meiner Meinung nach, ist:

  1. Erstellen Sie eine temporäre Filiale und Kasse zeigt auf 64bd9e7.
  2. Squash die drei commits zusammen.
  3. Überprüfen Sie Ihren Hauptzweig und setzen Sie ihn sofort nach 64bd9e7 auf Commit zurück.
  4. Rebase es auf Ihren temporären Zweig
1

Verwenden Sie einfach rebase -i und quetschen Sie nur diese Commits.

git rebase -i <main_branch> 
# Now just add `s` in front of all the commits you want to squash 

Wenn Sie viele Commits haben, würde ich Ihnen vorschlagen, einen Blick auf rebase --onto aufzunehmen -

git rebase --onto <final_base_commit> <initial_base_commit> <head> 

git rebase --onto 694bdda 64bd9e7 5e32fb0 

Hinweis: Geschichte Umschreiben ist eine erweiterte Operation, so treten sie mit Vorsicht.

Git rebase tutorial

+0

Ist das der einzige Weg? Es ist schwierig, eine Liste von über 100 Commits zu navigieren, also hoffe ich, eine Alternative zu finden. – adc17

+0

Überprüfen Sie meine aktualisierte Antwort. – hspandher

Verwandte Themen