J'ai effectué plusieurs commits sur différents fichiers, mais je souhaite jusqu'ici envoyer à mon référentiel distant uniquement un commit spécifique.
Est-ce possible?
Pour pousser jusqu'à un commit, vous pouvez écrire:
git Push <remotename> <commit SHA>:<remotebranchname>
à condition que <remotebranchname>
existe déjà sur la télécommande. (Si ce n'est pas le cas, vous pouvez utiliser git Push <remotename> <commit SHA>:refs/heads/<remotebranchname>
pour le créer automatiquement.)
Si vous voulez envoyer une validation sans en appuyant sur les validations précédentes, vous devez d’abord utiliser git rebase -i
pour réorganiser les validations.
J'ai essayé la solution suggérée:
git Push <remotename> <commit SHA>:<remotebranchname>
comme ça:
git Push Origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
Dans mon cas, le maître avait 5 commits d'avance et je voulais juste pousser mon dernier commit, mais ce qui précède a fini par pousser toutes mes modifications jusqu'à et y compris le commit nommé. Il me semble que la méthode du choix des cerises pourrait être une meilleure approche pour ce cas d'utilisation.
Les autres réponses manquent dans les descriptions de réorganisation.
git Push <remotename> <commit SHA>:<remotebranchname>
poussera un seul commit, mais ce commit doit être le plus ancien de vos commits locaux, non poussés, à ne pas confondre avec le commit le plus haut, le premier ou le tip, qui sont tous des descriptions ambiguës à mon avis. Le commit a besoin du plus ancien de vos commits, c’est-à-dire le plus éloigné de votre dernier commit. Si ce n'est pas la plus ancienne des validations, toutes les validations de votre plus ancien SHA local, non poussé, sur le SHA spécifié seront poussées. Pour réorganiser les commits, utilisez:
git rebase -i HEAD~xxx
Après avoir réordonné le commit, vous pouvez le transférer en toute sécurité dans le référentiel distant.
Pour résumer, j'ai utilisé
git rebase -i HEAD~<number of commits to SHA>
git Push Origin <post-rebase SHA>:master
pousser un seul commit vers ma branche maître distante.
Références:
Voir également:
Je suggérerais d'utiliser git rebase -i
; déplacez le commit que vous voulez pousser au sommet des commits que vous avez effectués. Ensuite, utilisez git log
pour obtenir le SHA du commit à rebasement, extrayez-le et appuyez dessus. Le rebase veillera à ce que tous vos autres commits soient maintenant des enfants de celui que vous avez poussé, ainsi les poussées futures fonctionneront bien aussi.
Cherry-pick fonctionne mieux par rapport à toutes les autres méthodes tout en poussant un commit spécifique.
La façon de faire est:
Créer une nouvelle branche -
git branch <new-branch>
Mettez à jour votre nouvelle branche avec votre branche Origin -
git fetch
git rebase
Ces actions feront en sorte que vous ayez exactement les mêmes éléments que votre origine.
Sélectionnez le sha id
que vous voulez faire. Push -
git cherry-pick <sha id of the commit>
Vous pouvez obtenir le sha id
en lançant
git log
Poussez-le à votre origine -
git Push
Exécutez gitk
pour voir que tout a l’air que vous souhaitiez.
Je crois que vous devriez "git revenir" à cette commettre et ensuite pousser. Ou vous pouvez cherry-pick
une validation dans une nouvelle branche et le transmettre à la branche du référentiel distant. Quelque chose comme:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git Push Origin {branch}