2016-01-28 6 views
6

folgendes Problem vor:Squash erste N verpflichtet git Geschichte/den Rest halten wie

  • Privat Projekt einige Anmeldeinformationen in den frühen Stadien enthalten
  • Wir Open-Source-hinwollen
  • Wir brauchen in einzelnen Dateien zu erhalten in der Geschichte
  • Referenzen der Anmeldeinformationen zu befreien sind nicht aber in Code
  • Komplizierte Geschichte mit mehreren verschmilzt, ziehen Anfragen usw.

Was ich tun möchte:

Squash alle von der Wurzel verpflichtet bis zu einem mit sauber Zustand zu einem großen willkürlichen begehen ‚Initial begehen‘.

Wenn ich tun:

git rebase -i --root 

und Squash die erste begeht zusammen:

pick Initial commit \ 
fixup dirty1  | 
fixup dirty2  | Squash these to one, to remove credentials. 
fixup dirty3  | 
fixup clean1  /
pick clean2 
pick clean3 
... 
... 

ich alles rebase haben und lösen alle Konflikte verschmelzen wieder danach.

Wie kann ich nur die ersten N-Commits quetschen, ohne den gesamten Verlauf inklusive der Merge-Konflikte nach dem N + 1-Commit auflösen zu müssen.

+0

Leider gibt es keine Möglichkeit, die gesamte Geschichte neu zu schreiben. Dies ist der Fall, wenn clean2 seinen neuen Elternteil (den gequetschten Commit) erhält, ändert sich sein Hash. Dies bedeutet, dass clean3 einen neuen Parent hat, der seinen Hash ändert, und so weiter und so fort. –

+0

Das wäre in Ordnung. Ich möchte nicht jeden Zusammenführungskonflikt manuell neu lösen müssen. – MaxNoe

+0

Ich habe Ihre Frage geupdated, aber ich denke, dass Sie mit Konfliktlösungen für jedes nachfolgende Festschreiben in der Geschichte befassen müssen. Während ich es nie benutzt habe, vermute ich, dass dies ein Anwendungsfall für https://www.kernel.org/pub/software/scm/git/docs/git-rere.html.html –

Antwort

0

Sie können git-rerere verwenden, um dieselben Konfliktlösungen wiederzuverwenden.

Der einzige Nachteil ist, dass Sie sie noch einmal lösen müssen nach aktivieren rerere, bevor es automatisch die Auflösungen wiederverwenden kann.