Comment pousser une nouvelle branche sans historique

95

J'ai git repo avec deux branches indépendantes, master et configs. J'ai créé des configurations, purgé tous les fichiers, puis placé uniquement dans les fichiers de configuration. Maintenant, je veux pousser cela sur un dépôt distant, mais pour ainsi dire une nouvelle branche vide (sans journaux de tous mes changements et anciennes révisions de la branche d'origine).

Comment puis-je purger toute l'histoire et la pousser?

Tomas Pruzina
la source

Réponses:

157

La purge de tous les fichiers ne supprime pas l'historique. Vous devez d'abord créer une branche sans historique et ajouter vos fichiers de configuration. Ces jours-ci, git checkoutune --orphanoption permet de créer une succursale sans historique. Voici les informations sur l' --orphanoption:

--orphan <nouvelle_branche>

Créez une nouvelle branche orpheline, nommée <new_branch>, démarrée à partir de <start_point> et basculez-y. Le premier commit fait sur cette nouvelle branche n'aura pas de parents et ce sera la racine d'une nouvelle histoire totalement déconnectée de toutes les autres branches et commits.

L'index et l'arborescence de travail sont ajustés comme si vous aviez précédemment lancé "git checkout <start_point>". Cela vous permet de démarrer un nouvel historique qui enregistre un ensemble de chemins similaires à <start_point> en exécutant facilement "git commit -a" pour faire le commit root.

Cela peut être utile lorsque vous souhaitez publier l'arborescence à partir d'un commit sans exposer son historique complet. Vous voudrez peut-être faire cela pour publier une branche open source d'un projet dont l'arborescence actuelle est "propre", mais dont l'historique complet contient des bits de code propriétaires ou autrement encombrés.

Si vous souhaitez démarrer un historique déconnecté qui enregistre un ensemble de chemins totalement différent de celui de <start_point>, vous devez effacer l'index et l'arborescence de travail juste après avoir créé la branche orpheline en exécutant "git rm -rf. " depuis le niveau supérieur de l'arbre de travail. Ensuite, vous serez prêt à préparer vos nouveaux fichiers, à repeupler l'arbre de travail, en les copiant d'ailleurs, en extrayant une archive tar, etc.

Voici un lien vers la documentation pour le paiement . Vous pouvez également courir git help checkout.

Une fois que vous avez créé votre branche sans historique, lorsque vous la poussez sur le serveur, elle n'aura pas non plus cet historique. FWIW, cela m'aide à penser git pushcomme "faire en sorte que la branche distante ressemble à ma branche locale". Donc, si vous avez de l'histoire, et que vous poussez, cela aura de l'histoire. Si vous ne le faites pas, la branche poussée ne le sera pas.

John Szakmeister
la source
37

Comment puis-je purger toute l'histoire et la pousser?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Ensuite, vous pouvez exécuter votre

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


cf. ce one-liner

Gérémie
la source
16

J'avais besoin de faire cela pour envoyer du code à un pigiste sans partager d'informations privées ni supprimer mon historique.

Dans le cas où l'un d'entre vous utilise SourceTree, c'est ainsi que j'ai réussi à le faire. Veuillez me faire savoir si j'ai fait quelque chose de mal ou si j'oublie quelque chose car je ne suis pas familier avec la gestion du contrôle de source.

  1. Je suis allé au bouton du terminal sur l'arborescence des sources.
  2. J'ai créé une nouvelle branche 'orpheline' en utilisant la commande: 'git checkout --orphan clean-ver' où clean-ver est le nom de ma branche
  3. J'ai fermé le terminal et j'ai vu que mon journal de validation était effacé parce que j'étais dans une nouvelle branche orpheline. J'ai mis en scène tout mon code source et validé les changements.
  4. J'ai configuré mon référentiel bitbucket dans un référentiel> ajouter à distance ou un référentiel> paramètres du référentiel> ajouter.
  5. J'ai fermé ça et j'ai cliqué sur le bouton poussoir
  6. J'ai sélectionné ma nouvelle branche «clean-ver» et j'ai dit ok.

Quand j'ai vérifié bitbucket, il semble que cela semble avoir fonctionné et a supprimé mon historique de commit.

J'espère que cela aide quelqu'un.

ThinkBonobo
la source