Quelques notes sur la façon de git fonctionne (non technique):
Lorsque vous rebase, git prend la commet en question, et "engage à nouveau" sur le dessus de la propre histoire. Ceci pour éviter que les histoire de montrer:
Description: tree -> mywork -> merge -> mywork -> merge -> mywork -> merge
Commit SHA1: aaaa -> bbbb -> cccc -> dddd -> eeee -> ffff -> gggg
Après cela, il peut ressembler à ceci (ou similaire):
Description: tree -> rebase
Commit SHA1: aaaa -> hhhh
Le problème est que le nouveau commit que vous essayez de repousser n'est PAS un descendant de l'engager sur le bout de la branche que vous pousser à.
Maintenant, vous savez que la même info est dans le commet, mais git est responsable non seulement d'écraser ceux qui s'engage là-bas (bbbb-gggg dans l'exemple ci-dessus).
Partagé Des Pensions De Modèle
Si vous utilisez un référentiel partagé, puis des choses comme ça peut faire très déroutant. Laissez-moi vous expliquer pourquoi. Dire qu'un autre développeur tiré vers le bas de la branche, et ils ont engage aaaa -> gggg dans leur branche. Ensuite ils font un commit iiii
En attendant, vous relocalisée et forcé à pousser, entraînant l'arbre à ressembler à ceci:
Description: tree -> rebase
Commit SHA1: aaaa -> hhhh
Lorsque le développeur essaie de le pousser, il obtient un "non-fast forward" message. Quand il le fait d'une fusion, les deux histoires sont RELIÉS ensemble, et de vous retrouver avec un désordre
Quelque chose comme ceci (en désordre):
Description: tree -> rebase -> mywork -> merge -> mywork -> merge -> mywork -> merge -> devwork -> merge
Commit SHA1: aaaa -> hhhh -> bbbb -> cccc -> dddd -> eeee -> ffff -> gggg -> iiii -> jjjj
EN d'autres termes, si les autres sont en tirant ET en poussant, il est préférable que vous vous en tenez à git merge, ou ÉVITER de POUSSER jusqu'à ce que après le rebase (et seulement rebase votre travail).
Visible Publiquement Référentiel Modèle
Vous êtes peut-être l'aide d'un autre (plus gittish) modèle où vous voulez juste les gens à être en mesure de tirer de votre pension. Dans ce cas, la commande git push --force n'est pas trop mauvais, parce qu'alors ils peuvent faire face à garder avec elle. Ils peuvent rebase leurs modifications pour être au top de vos modifications avant de donner leurs correctifs pour vous. Il empêche votre pension à partir de l'obtention de tout foiré.
Cependant, il peut y avoir une meilleure façon pour vous. git push --miroir
À partir de http://www.kernel.org/pub/software/scm/git/docs/git-push.html
Au lieu de nommer chaque ref pousser, spécifie que toutes les refs en vertu de
$GIT_DIR/refs/ (ce qui inclut, mais sans s'
pas limité à refs/heads/,
refs/remotes/, et refs/tags/)
en miroir, sur le dépôt distant.
Local nouvellement créé refs sera
poussé à l'extrémité distante, localement
mise à jour refs sera force de mises à jour sur
l'extrémité distante, et a supprimé les références seront
être supprimé à partir de l'extrémité distante. Cette
est la valeur par défaut si la configuration
option à distance..miroir.
Une des grandes choses au sujet de git , c'est qu'il est très flexible et permet de nombreux différents types de flux de travail. Mais c'est de la vraie force réside dans le fait que c'est un modèle distribué, donc je crois que le plus de retour sur investissement peut être récolté en l'utilisant de cette façon.