2017-02-08 3 views
3

Ich machte einen dummen Fehler und bin mir nicht sicher, der beste Weg, um es zu lösen. Hier ist, was ich getan habe:Squash Hunderte von alten Commits auf Herkunft

  • Erstellt ein Web-Projekt basierend auf einem Standard.
  • entfernt .git alle Geschichte (ca. 500 Commits) zu entfernen, bevor mein erster begehen
  • Mehr Monate und etwa 200 von meinem eigenen Projekt zu machen später Commits fusionierte ich den Upstream-vorformulierten Zweig in einer lokale Niederlassung meines Projektes. Dies hat rund 500 weitere Commits von der vorgelagerten Boilerplatte hinzugefügt.
  • Hergestellt weitere 10 oder begeht so in der lokalen Niederlassung meines Projekt mit dem Updates aus dem vorformulierten
  • fusionierte die Arbeits lokale Niederlassung in meinen entwickeln Zweig
  • die Entwicklung Zweig Ursprung
  • Pushed wieder in Gang zu bekommen
  • Erstellt ein mehr begehen auf lokale Niederlassung entwickeln (nicht auf den Ursprung geschoben)
  • Erstellt etwa ein Dutzend auf einem anderen lokalen Niederlassung verpflichtet, die Entwicklung nicht verschmolzen (nicht auf Herkunft geschoben)

Mein git Die Geschichte hat nun die gesamte Vorgeschichte, bevor ich mein erstes Projekt beging, das ich ursprünglich entfernt hatte. Es hat auch eine hunderte von Commits in der Mitte meiner Commits eingestreut.

Was ich tun möchte, ist alles in der Zusammenführung von Upstream in den lokalen Zweig, den ich in einem einzigen Commit verwendet wurde Squash. Gibt es einen etwas schmerzfreien Weg, dies zu tun?

Auch ich muss Geschichte auf Ursprung außerdem neu schreiben. Dies ist ein privates Repo und nur ein paar Leute benutzen es. Wie mache ich das?

+3

Warum machen Menschen das für sich? –

+1

@JoePhillips Große Frage! In meinem Fall hatte ich geplant, meine lokale Niederlassung zu quetschen, bevor ich mich weiterentwickeln konnte. Aber es gab einige Veränderungen, die jemand anderes sofort brauchte, und ich war mir nicht sicher, wie ich den Squash machen sollte. Also bin ich zusammengewachsen und dachte, ich könnte gleich damit fertig werden. Natürlich hatten andere Dinge Priorität, also versuche ich jetzt, dieses Chaos meiner eigenen Arbeit zu bereinigen. – Tauren

+0

Ich bin total gegen Kürbisse, also denke ich, ich sehe das nicht wirklich als Chaos –

Antwort

2

Was ich tun möchte, ist alles in der Zusammenführung von Upstream in den lokalen Zweig, die ich in einem einzigen Commit verwendet wurde Squash. Gibt es einen etwas schmerzfreien Weg, dies zu tun?

Verwenden Sie zwei lokale Klon Ihrer Repo:

  • in einem, können Sie die verschiedenen Status, den Sie zerquetschen wollen Kasse (wie Ihre Upstream-merge commit SHA1)
  • in der anderen, was Sie tun ein git reset --hard auf den ersten begehen, die noch korrekt war (dh, wo die Geschichte gut ist)

Dann wird aus dem zweiten, man kann git --work-tree=/path/to/first/clone add . alles von den ersten und begeht.

Wiederholen Sie für den verschiedenen Status des ersten Repos, den Sie in einen Commit zerquetschen möchten (erreicht im zweiten Repo durch Hinzufügen des Arbeitsbaums des ersten Repos und Commit).

Dann git push --force.

+0

Danke, das hat den Trick gemacht! Eigentlich habe ich es nur einmal gemacht und nicht wiederholt. Anstatt zu wiederholen, wählte ich die letzten Commits aus. Das hat ein bisschen Daten verloren, wie zum Beispiel die ursprünglichen Commit-Daten und die Zweige, in denen sie sich befanden, aber ich war nicht allzu besorgt darüber. – Tauren

Verwandte Themen