Wie man einen neuen Zweig ohne Geschichte pusht

92

Ich habe Git Repo mit zwei unabhängigen Zweigen, Master und Configs. Ich habe Konfigurationen erstellt, alle Dateien gelöscht und dann nur in Konfigurationsdateien abgelegt. Jetzt möchte ich dies auf Remote-Repo übertragen, aber sozusagen einen neuen, leeren Zweig (ohne Protokolle aller meiner Änderungen und alten Revisionen des ursprünglichen Zweigs).

Wie kann ich die gesamte Geschichte löschen und verschieben?

Tomas Pruzina
quelle

Antworten:

153

Durch das Löschen aller Dateien wird der Verlauf nicht gelöscht. Sie müssen zuerst einen Zweig erstellen, der keinen Verlauf hat, und dann Ihre Konfigurationsdateien hinzufügen. Heutzutage git checkoutgibt es eine --orphanOption, mit der ein Zweig ohne Verlauf erstellt wird. Hier sind die Informationen zur --orphanOption:

--orphan <new_branch>

Erstellen Sie einen neuen verwaisten Zweig mit dem Namen <new_branch>, der von <start_point> aus gestartet wurde, und wechseln Sie zu diesem Zweig. Das erste Commit für diesen neuen Zweig hat keine Eltern und ist die Wurzel einer neuen Geschichte, die von allen anderen Zweigen und Commits völlig getrennt ist.

Der Index und der Arbeitsbaum werden so angepasst, als hätten Sie zuvor "git checkout <Startpunkt>" ausgeführt. Auf diese Weise können Sie einen neuen Verlauf starten, der eine Reihe von Pfaden ähnlich wie <Startpunkt> aufzeichnet, indem Sie einfach "git commit -a" ausführen, um das Root-Commit durchzuführen.

Dies kann nützlich sein, wenn Sie den Baum aus einem Commit veröffentlichen möchten, ohne dessen vollständigen Verlauf verfügbar zu machen. Möglicherweise möchten Sie dies tun, um einen Open-Source-Zweig eines Projekts zu veröffentlichen, dessen aktueller Baum "sauber" ist, dessen vollständiger Verlauf jedoch proprietären oder anderweitig belasteten Code enthält.

Wenn Sie einen nicht verbundenen Verlauf starten möchten, der eine Reihe von Pfaden aufzeichnet, die sich grundlegend von denen von <Startpunkt> unterscheiden, sollten Sie den Index und den Arbeitsbaum direkt nach dem Erstellen des verwaisten Zweigs löschen, indem Sie "git rm -rf" ausführen. "" von der obersten Ebene des Arbeitsbaums. Anschließend können Sie Ihre neuen Dateien vorbereiten, den Arbeitsbaum neu füllen, sie von einer anderen Stelle kopieren, einen Tarball extrahieren usw.

Hier ist ein Link zur Dokumentation zum Auschecken . Sie können auch laufen git help checkout.

Wenn Sie Ihren Zweig ohne Verlauf erstellt haben und ihn dann auf den Server übertragen, wird er auch nicht mehr über diesen Verlauf verfügen. FWIW, es hilft mir, mir vorzustellen, dass git push"der Remote-Zweig genauso aussieht wie mein lokaler". Wenn Sie also Geschichte haben und pushen, wird es Geschichte haben. Wenn Sie dies nicht tun, wird der Push-Zweig dies nicht tun.

John Szakmeister
quelle
35

Wie kann ich die gesamte Geschichte löschen und verschieben?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Dann können Sie Ihre ausführen

git push <remote-name> <branch-name>


vgl. dieser Einzeiler

Gerämie
quelle
16

Ich musste dies tun, um einem Freiberufler Code zu senden, ohne private Informationen weiterzugeben oder meinen Verlauf zu löschen.

Falls einer von Ihnen SourceTree verwendet, habe ich es so geschafft. Bitte lassen Sie mich wissen, wenn ich etwas falsch gemacht habe oder etwas vergessen habe, da ich mit der Verwaltung der Quellcodeverwaltung nicht vertraut bin.

  1. Ich ging zum Terminal-Button im Quellbaum.
  2. Ich habe einen neuen 'Orphan'-Zweig mit dem Befehl' git checkout --orphan clean-ver 'erstellt, wobei clean-ver mein Filialname ist
  3. Ich habe das Terminal geschlossen und festgestellt, dass mein Festschreibungsprotokoll gelöscht wurde, weil ich mich in einem neuen verwaisten Zweig befand. Ich habe meinen gesamten Quellcode bereitgestellt und die Änderungen festgeschrieben.
  4. Ich habe mein Bitbucket-Repository entweder in Repository> Remote hinzufügen oder Repository> Repository-Einstellungen> Hinzufügen eingerichtet.
  5. Ich schloss das und klickte auf den Druckknopf
  6. Ich habe meinen neuen 'Clean-Ver'-Zweig ausgewählt und sagte ok.

Als ich bitbucket überprüfte, schien dies funktioniert zu haben und meine Commit-Historie zu verwerfen.

Hoffe das hilft jemandem.

ThinkBonobo
quelle