Comment puis-je pousser un commit spécifique sur une télécommande, et non des commits précédents?
j'ai fait plusieurs s'engage sur différents dossiers, mais jusqu'à présent, je voudrais pousser mon dépôt distant d'une validation.
est-ce possible?
6 réponses
pousser via un commit, vous pouvez écrire:
git push <remotename> <commit SHA>:<remotebranchname>
pourvu 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 l'autocréer.)
si vous voulez pousser une commit sans pousser les commits précédents, vous devez d'abord utiliser git rebase -i
pour ré-ordonner les commits.
MODIFIER
pour une description plus complète de ce qu'il faut faire, consultez la réponse de Samuel: https://stackoverflow.com/a/27907287/889213
, les Références:
essayé la solution proposée:
git push <remotename> <commit SHA>:<remotebranchname>
comme ceci:
git push origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master
dans mon cas maître était 5 commits en avant et je voulais juste pousser mon dernier commit mais le ci-dessus a fini par pousser tous mes changements jusqu'à et y compris le commit nommé. Il me semble que la méthode de sélection pourrait être une meilleure approche pour cette utilisation.
les autres réponses manquent sur les descriptions de réorganisation.
git push <remotename> <commit SHA>:<remotebranchname>
poussera un seul commit, mais ce commit doit être le plus ancien de votre local, non poussé, commits, à ne pas confondre avec le top, le first, ou le tip commit, qui sont toutes des descriptions ambiguës à mon avis. La validation doit le plus ancien de vos commits, c'est à dire le plus éloigné de votre dernier commit. Si ce n'est pas le plus ancien commit, alors tous les commits de votre plus ancien, local, SHA non poussé vers le SHA spécifié sera poussé. Pour réordonner l'utilisation de commits:
git rebase -i HEAD~xxx
après avoir réorganisé la propagation, vous pouvez la pousser en toute sécurité vers le dépôt distant.
pour résumer, j'ai utilisé
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
pour pousser un seul commit à ma branche master distante.
, les Références:
- http://blog.dennisrobinson.name/push-only-one-commit-with-git/
- http://blog.dennisrobinson.name/reorder-commits-with-git /
voir aussi:
je suggère d'utiliser git rebase -i
; déplacez le commit que vous voulez pousser vers le haut des commits que vous avez fait. Ensuite, utilisez git log
pour obtenir le SHA de la propagation rebasée, vérifiez-le, et poussez-le. Le rebase aura fait en sorte que tous les autres commits soient maintenant les enfants de celui que vous avez poussé, donc les futures pushs fonctionneront très bien aussi.
Cherry-pick fonctionne mieux par rapport à toutes les autres méthodes tout en poussant une commit spécifique.
La façon de le faire est:
créer une nouvelle branche -
git branch <new-branch>
mettre à jour votre nouvelle branche avec votre branche d'origine -
git fetch
git rebase
ces actions feront en sorte que vous avez exactement la même chose que votre origine a.
choisissez le sha id
que vous voulez faire push -
git cherry-pick <sha id of the commit>
vous pouvez obtenir le sha id
en exécutant
git log
Pousser à l'origine -
git push
Exécuter gitk
de voir que tout à l'air de la même manière que vous vouliez.
je crois que vous devriez" revenir en arrière " à ce commit et ensuite le pousser. Ou vous pouvez cherry-pick
un commit dans une nouvelle branche, et pousser cela à la branche sur la prise en compte à distance. Quelque chose comme:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}