Renvoyer les changements en amont avec Subtree Split
Découvrez comment extraire les changements effectués dans un sous-arbre et les renvoyer vers le dépôt amont d’origine à l’aide de git subtree split et push.
Renvoyer les changements en amont avec Subtree Split est une leçon Git Advanced: Monorepo, Submodules & Workflows gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Git Advanced: Monorepo, Submodules & Workflows, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Git Advanced: Monorepo, Submodules & Workflows comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Two-Way Subtree Workflows
Subtree is not just for pulling code in. One of its strengths is the ability to contribute changes back to the original project. This makes subtree a genuine two-way integration tool.
The key command is git subtree push, powered internally by git subtree split.
What 'split' Does
git subtree split walks your history and produces a synthetic branch containing only the commits that touched the subtree's prefix, rewritten as if that folder were the repo root.
This is what makes the changes mergeable back upstream.
Recap: Adding a Subtree
Assume you added an upstream library under vendor/widget earlier. Now you have made improvements there and want to share them.
git subtree add --prefix=vendor/widget \
https://example.com/widget.git main --squashCreating the Split Branch
Run split to create a branch with just the subtree's history rebased to the prefix root.
git subtree split --prefix=vendor/widget -b widget-upstreamInspecting the Split
Check out the split branch and confirm its files live at the root, not under vendor/widget. This proves the rewrite worked.
git log --oneline widget-upstream
git ls-tree --name-only widget-upstreamPushing the One-Step Way
You can split and push in a single command. git subtree push does the split internally and pushes the result to the upstream remote and branch.
git subtree push --prefix=vendor/widget \
https://example.com/widget.git contrib-branchOpening a Pull Request
Push to a feature branch on a fork you control, then open a pull request upstream. Your subtree commits appear as ordinary commits on that project, ready for review.
Keeping Splits Fast
On large histories, split can be slow because it re-walks commits. Subtree caches rewrites; passing --rejoin writes a merge commit so future splits start from there.
git subtree split --prefix=vendor/widget --rejoinAvoiding Mixed Commits
Split works cleanly only when commits are scoped. A commit touching both the subtree and unrelated app code becomes awkward upstream. Keep subtree changes in their own focused commits.
When to Push Back
Push upstream when your fixes are general-purpose and the maintainers accept contributions. For private, repo-specific tweaks, keep them local and never push them back.
Pulling Their Acceptance Back
After upstream merges your contribution, pull it back into the subtree so your superproject and the original project converge again, closing the round trip.
git subtree pull --prefix=vendor/widget \
https://example.com/widget.git main --squashQuick Check
Test your understanding of subtree split and push.
Recap
You learned the two-way subtree workflow: split isolates subtree commits into a prefix-rooted branch, push sends them upstream in one step, --rejoin speeds up repeated splits, and keeping commits focused makes upstream contribution clean.
Questions Fréquemment Posées
La leçon « Renvoyer les changements en amont avec Subtree Split » est-elle gratuite ?
Oui — le texte complet de « Renvoyer les changements en amont avec Subtree Split » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Git Advanced: Monorepo, Submodules & Workflows, passe à CoddyKit PRO. Le cours Git Advanced: Monorepo, Submodules & Workflows comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Renvoyer les changements en amont avec Subtree Split » ?
Découvrez comment extraire les changements effectués dans un sous-arbre et les renvoyer vers le dépôt amont d’origine à l’aide de git subtree split et push. Tu pratiques Git Advanced: Monorepo, Submodules & Workflows avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Git Advanced: Monorepo, Submodules & Workflows ?
Aucune expérience préalable n'est requise. Git Advanced: Monorepo, Submodules & Workflows sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Renvoyer les changements en amont avec Subtree Split » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Git Advanced: Monorepo, Submodules & Workflows ?
Oui. Chaque leçon Git Advanced: Monorepo, Submodules & Workflows inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Introduction à Git Subtree
- Ajout et fusion avec Subtree
- Comparaison entre Subtree et sous-module
- Renvoyer les changements en amont avec Subtree Split