2013-04-18 1 views
2

Je me suis rendu compte que j'avais mis mon user.name mal, donc j'ai utilisé this answer pour corriger les commits incorrects. Localement, ça a bien marché. Cependant, git me dit maintenantComment puis-je transmettre les validations corrigées à un référentiel distant?

$ git status 
# On branch master 
# Your branch and 'origin/master' have diverged, 
# and have 15 and 15 different commits each, respectively. 
# (use "git pull" to merge the remote branch into yours) 
# 
nothing to commit, working directory clean 

Alors, maintenant, je dois envoyer en quelque sorte mes changements à mon dépôt GitHub, mais quand je pousse:

$ git push 
WARNING: gnome-keyring:: couldn't connect to: /run/user/mspencer/keyring-uscL41/pkcs11: No such file or directory 
Username for 'https://github.com': iBeliever 
Password for 'https://[email protected]': 
To https://github.com/iBeliever/weather-desktop.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to 'https://github.com/iBeliever/weather-desktop.git' 
hint: Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') 
hint: before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

Je ne suis pas tout à fait sûr de savoir comment résoudre ce problème . J'ai traité des changements à distance auparavant, et les ai résolus en tirant et fusionnant, mais je ne suis pas sûr que faire dans ce cas. J'ai besoin de mettre à jour mon dépôt GitHub avec les noms corrigés, comment faire?

Répondre

5

La réponse de Steven est correct mais très dangereux. Alors soyez prudent lorsque vous utilisez une poussée forcée.

Tout d'abord, git push -f forcera à pousser toutes les branches locales vers le référentiel distant.

Pour simplement pousser la branche principale, vous devez le spécifier.

git push -f origin master 

Quand vous faites cela, vous voulez dire toutes les autres personnes qui ont accès à ce référentiel pour tirer vers le bas vos modifications avant de faire des commits supplémentaires. Sinon, les branches vont diverger de manière folle que vous ne voulez pas traiter.

+0

J'ai lu plusieurs fois que 'git push -f' est dangereux, mais je ne sais pas pourquoi. Est-ce seulement dangereux quand d'autres personnes ont des clones du dépôt? Je suis le seul à travailler sur le projet, alors est-ce sûr dans ce cas? – iBelieve

+0

Il est dangereux car vous forcez une mise à jour du référentiel distant qui risque de perdre des validations. Si vous avez le journal git A-> B-> C, il est possible de vérifier localement la validation B, puis de forcer l'envoi d'une mise à jour vers le référentiel distant. La télécommande aurait alors l'historique A-> B. Si vous êtes le seul à avoir accès au référentiel et que vous êtes en train de pousser un état du référentiel avec lequel vous êtes à l'aise. Alors vous devriez être libre et clair. Il suffit de savoir que git push -f origine peut avoir des conséquences non-réversibles. – atreat

1

Vous can force la poussée

git push -f 

Plus d'info

 
     -f, --force 
      Usually, the command refuses to update a remote ref that is not an 
      ancestor of the local ref used to overwrite it. This flag disables 
      the check. This can cause the remote repository to lose commits; 
      use it with care. 
Questions connexes