174 votes

comment voulez-vous pousser que certains de vos git local s'engage?

Supposons que j'ai 5 local s'engage. Je veux pousser seulement 2 d'entre eux à une centralisation de pensions de titres (à l'aide d'un SVN de style de flux de travail). Comment dois-je faire?

Cela ne fonctionne pas:

git checkout HEAD~3  #set head to three commits ago
git push #attempt push from that head

Qui finit par les pousser tous les 5 local s'engage.

Je suppose que j'ai pu faire un git reset à fait annuler ma s'engage, suivie par git stash et puis git push -- mais j'ai déjà reçu des messages de validation écrite et fichiers organisés et je ne veux pas les refaire.

Mon sentiment est que certains drapeau passé de pousser ou de réinitialiser serait de travailler.

Si cela peut aider, voici mon git config

[ramanujan:~/myrepo/.git]$cat config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = ssh://server/git/myrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

206voto

Ryan Graham Points 4734

En supposant que votre commits sont sur la branche master et vous souhaitez pousser à la distance branche master:

$ git push origin master~3:master

Si vous utilisez git-svn:

$ git svn dcommit master~3

Dans le cas de git-svn, vous pouvez également utiliser HEAD~3, car il s'attend à une validation. Dans le cas de la droite git, vous devez utiliser le nom de la branche, car la TÊTE n'est pas correctement évalué dans le refspec.

Vous pouvez aussi prendre un peu plus de l'approche de l':

$ git checkout -b tocommit HEAD~3
$ git push origin tocommit:master

Si vous êtes de prendre l'habitude de ce type de flux de travail, vous devriez envisager de faire votre travail dans une branche distincte. Ensuite, vous pourriez faire quelque chose comme:

$ git checkout master
$ git merge working~3
$ git push origin master:master

Notez que "à l'origine de master:master" la partie est probablement l'option pour votre installation.

16voto

Greg Hewgill Points 356191

Ce que j'ai à faire est de travailler sur une branche locale appelée "travail". Cette branche contient tous les temporaire s'engage (comme les solutions de contournement ou privé d'options de construction ou de quoi que ce soit) que je n'ai pas l'intention de pousser à l'amont du référentiel. Je travaille loin sur cette branche, puis quand je veux commettre-je passer à la branche master, cherry-pick approprié s'engage à ce que je ne veux commettre, puis poussez le maître.

Après avoir enregistré les modifications de l'amont dans ma branche master, j' git checkout work et git rebase master. Qui réécrit toutes mes modifications locales pour être à la fin de l'histoire.

Je suis en fait à l'aide d' git svn avec ce flux de travail, donc mon "push" implique git svn dcommit. J'utilise aussi tig qui est un joli texte en mode gui référentiel viewer, pour choisir le appropriée s'engage à maîtriser.

16voto

Thomas Leonard Points 2166

Par défaut, git push pousse toutes les branches. Lorsque vous faites cela:

 git checkout HEAD~3  #set head to three commits ago
 git push #attempt push from that head

Vous vous déplacez à un décollement de la TÊTE (vous n'êtes pas sur n'importe quelle branche) et puis vous appuyez sur toutes les branches, y compris la maîtrise locale (qui est toujours là où il était) pour le maître.

Le manuel de la solution est:

 git push origin HEAD:master

Si vous trouvez que le comportement par défaut de pousser toutes les branches de confusion (et dangereux!), ajoutez ceci à votre ~/.gitconfig:

 [remote.origin]
    push = HEAD

Alors seulement la direction générale, vous êtes sur est poussé. Dans votre exemple (un décollement de la tête), vous avez eu ce message d'erreur, plutôt que accidentellement en poussant le mal s'engage à:

 error: unable to push to unqualified destination: HEAD

Prograide.com

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.

Powered by:

X