Si vous poussez un commit sur le serveur, puis de réécriture qui s'engagent localement (avec git reset
, git rebase
, git filter-branch
, ou de toute autre version de l'histoire de manipulation), et ensuite poussé qui réécrit commettre sauvegarder sur le serveur, vous aurez vis de n'importe qui d'autre qui avait tiré. Voici exemple, disons que vous avez commis, et l'a poussé vers le serveur.
- *- *- <--Master
- *- *- <-- Origin/master
Maintenant, vous décidez de réécrire, dans la façon dont vous l'avez mentionné, de réinitialiser et de ré-engager. Notez que cela laisse une balançant commettre Une, qui finira par être nettoyée comme il n'est pas accessible.
-*-*-
\
A' <-- master
- *- *- <-- Origin/master
Si quelqu'un d'autre, disons que Fred, abat master
depuis le serveur pendant que vous faites cela, ils ont une référence à Un, ils peuvent commencer à travailler à partir de:
- *- *- '<--Master
- *- *- <-- Origin/master
-*-*-A-B <-- fred/master
Maintenant, si vous avez été en mesure de pousser votre Un' origin/master, qui permettrait de créer un non-rapide-vers l'avant, il n'y aurait pas Un de son histoire. Donc, si Fred a essayé de tirer de nouveau, il avait soudain besoin de fusion et de re-présenter l'Un commit:
- *- *- '<--Master
- *- *- <-- Origin/master
-*-*-A-B-\
\ * <-- fred/master
Un'--/
Si Fred arrive à faire ce constat, il pourrait faire un rebase, ce qui pourrait les empêcher de commettre Un de réapparaître à nouveau. Mais il faudrait qu'il s'en aperçoivent, et n'oubliez pas de le faire; et si vous avez plus d'une personne qui a tiré Un vers le bas, ils ont tous à rebase afin d'éviter d'obtenir le supplément d'Un commit dans l'arbre.
Donc, il n'est généralement pas une bonne idée de changer l'histoire sur les pensions de titres que d'autres personnes de tirer à partir d'. Toutefois, si vous arrive de savoir que personne d'autre ne tirant que de pensions de titres (par exemple, c'est votre propre repo, ou vous n'avez qu'un autre développeur qui travaille sur le projet qui vous permet de coordonner facilement avec), vous pouvez forcer la mise à jour en cours d'exécution:
git push -f
ou
git push origin +master
Ces ignorer la vérification pour un non-avance rapide push, et de mettre à jour ce qui est sur le serveur de votre nouveau Une " révision, l'abandon de la révision de sorte qu'il finira par être nettoyée.