J'ai fait plusieurs commits sur différents fichiers, mais jusqu'à présent je voudrais pousser vers mon dépôt distant seulement un commit spécifique.
Est-ce possible ?
J'ai fait plusieurs commits sur différents fichiers, mais jusqu'à présent je voudrais pousser vers mon dépôt distant seulement un commit spécifique.
Est-ce possible ?
Pour pousser jusqu'à un engagement donné, vous pouvez écrire :
git push <remotename> <commit SHA>:<remotebranchname>
fourni par <remotebranchname>
existe déjà sur l'ordinateur distant. (Si ce n'est pas le cas, vous pouvez utiliser la commande git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
pour l'autocréer).
Si vous voulez pousser un commit sin en poussant des commits précédents, vous devez d'abord utiliser git rebase -i
pour réordonner les commits.
git push <remotename> <commit SHA>:<remotebranchname>
fonctionne. L'astuce consiste à le combiner avec git rebase -i
pour déplacer le commit que vous voulez comme premier commit, et spécifier que commit-sha
Le commentaire de @dminer a besoin de beaucoup plus de upvotes. Je pense que vous devriez modifier la réponse pour montrer git rebase -i dminer.
Une autre bonne astuce est de s'assurer que vous copiez le SHA du commit que vous voulez pousser. après en faisant ce rebase -i, et pas avant, comme je viens de le faire :)
J'ai essayé la solution suggérée :
git push <remotename> <commit SHA>:<remotebranchname>
comme ça :
git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
Dans mon cas, master avait 5 commits d'avance et je voulais juste pousser mon dernier commit mais ce qui précède a fini par pousser tous mes changements jusqu'au commit nommé. Il me semble que la méthode cherry-pick pourrait être une meilleure approche pour ce cas d'utilisation.
Je suggère d'utiliser git rebase -i
; déplacez le commit que vous voulez pousser au sommet des commits que vous avez faits. Puis utilisez git log
pour obtenir le SHA du commit rebasé, le vérifier, et le pousser. Le rebasement aura fait en sorte que tous vos autres commits soient maintenant des enfants de celui que vous avez poussé, donc les futures poussées fonctionneront bien aussi.
Pourriez-vous peut-être donner un exemple complet de déplacement, en particulier en ce qui concerne le système d'information de la Commission européenne ? git log
pas ?
Disons que vous avez 3 commits relativement indépendants avec les messages "A", "B", "C" commis dans cet ordre et que vous voulez pousser "B". git rebase -i' devrait vous permettre d'obtenir un éditeur listant les trois commits ; déplacez B vers le haut et sauvegardez/quittez. git log --pretty=oneline -n3' listera B, A, C avec des hashs avant chaque message, avec B en dernier. git checkout -b temp $hash_of_B ; git push' devrait pousser B à ce stade. Vous voudrez alors probablement faire 'git checkout -b master ; git branch -d temp' pour revenir à votre état précédent, en supposant que vous étiez sur votre branche master locale ; remplacez si nécessaire.
+1 Avez-vous déjà rencontré le "colère des dieux du git" après rebase-push-rebase ? (Cela pourrait aussi arriver par accident, n'est-ce pas ?)
Cherry-pick fonctionne mieux que toutes les autres méthodes pour pousser un commit spécifique.
La façon de faire est la suivante :
Créer une nouvelle branche -
git branch <new-branch>
Mettez à jour votre new-branch avec votre branche d'origine -
git fetch
git rebase
Ces actions vous permettront de vous assurer que vous avez exactement la même chose que votre origine.
Cherry-picker les sha id
que vous voulez faire pousser -
git cherry-pick <sha id of the commit>
Vous pouvez obtenir le sha id
en courant
git log
Poussez-le à votre origine -
git push
Ejecutar gitk
pour voir si tout est comme vous le vouliez.
Je pense que vous devez revenir à ce commit avec "git revert" et ensuite le pousser. Ou vous pourriez cherry-pick
un commit dans une nouvelle branche, et le pousser vers la branche sur le dépôt distant. Quelque chose comme :
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
Revert et cherry-pick sont tous deux de mauvaises idées. git rebase -i est votre ami ici, voir la réponse de Walter Mundt ci-dessous.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
6 votes
Duplicata possible de git : pousser un seul commit
0 votes
Voir la bonne technique ici : stackoverflow.com/a/1789142/1579667