2010-10-22 5 views
2

J'utilise git avec mon ami. j'ai fait quelques commits et mon ami ne pas mettre à jour son repo local et poussé avec -f arugment:Un petit problème de git

git push -f origin master 

maintenant dans le serveur git (github) mes commits sont détruits et la dernière Commit est mes amis. Mais j'ai une histoire de commits localement. Puis-je en quelque sorte les fusionner au maître? Ou je dois le faire à la main avec la nouvelle version?

Répondre

3

On dirait que votre ami a modifié quelque chose déjà publié sur un référentiel public. Voir http://progit.org/book/ch3-6.html. Commencez par brûler votre ami.

Normalement, une traction git devrait déclencher une fusion de votre côté. Vous pouvez toujours copier l'intégralité de votre référentiel en tant que sauvegarde au cas où. En outre, vous pouvez simplement copier les modifications de votre dernière version vers une nouvelle commande et les valider toutes en une seule validation.

1

Je n'ai pas testé cela, mais je pense que je forcerais vos commits à être publiés sur github (réécrivant ainsi l'histoire), que votre "ami" tire vos changements, rebase ses changements, puis pousser ses changements vers le haut. De cette façon, vous obtenez vos deux changements au même endroit.

Une bonne règle de base est de NE JAMAIS FORCER A Engagez-vous à GitHub :) Faites-cette fois pour obtenir votre pension à l'état où il était avant votre « ami » foiré:

# on your machine 
git push origin master --force 

#now your "friend's" working copy is fairy screwed up, so on his machine: 
git checkout -b screwed_up #checks out a new branch called screwed_up 
git pull origin master # pulls in your changes 
git checkout master #checks out his version with his changes 
git rebase screwed_up #moves his changes to the end of your changes (see git graphs for more details) 
git commit -am 'your message here' 
git push origin master #pushes his changes, which are now merged with your changes back to github 
0

Le fait de repousser votre propre validation locale est un moyen (git push origin master --force), mais il efface la contribution de votre ami.

Vous pouvez:

  • renomme master sur GitHub (voir "renaming remote git branch")
  • FETCH branche "friend_master" de GitHub, et rebasage sur le dessus de votre maître, intégrant les contributions de vos amis, et les valider.
  • git push origin master (recréant la branche principale avec un contenu complet)

Ensuite, votre ami peut simplement réinitialiser son/sa branche locale à masterorigin/master.