Vous devriez être en mesure de forcer votre révision locale sur le référentiel distant en utilisant
git push -f <remote> <branch>
(par exemple git push -f origin master
). Quitter <remote>
et <branch>
forcera à pousser toutes les branches locales qui se sont établies --set-upstream
.
Soyez averti, si d'autres personnes partagent ce référentiel, leur historique de révision entrera en conflit avec le nouveau. Et s'ils ont des commits locaux après le point de changement, ils deviendront invalides.
Mise à jour : J'ai pensé que j'ajouterais une note secondaire. Si vous créez des modifications que d'autres examineront, il n'est pas rare de créer une branche avec ces modifications et de rebaser périodiquement pour les maintenir à jour avec la branche de développement principale. Faites simplement savoir aux autres développeurs que cela se produira périodiquement afin qu'ils sachent à quoi s'attendre.
Mise à jour 2 : en raison du nombre croissant de téléspectateurs, j'aimerais ajouter des informations supplémentaires sur ce qu'il faut faire lorsque votre upstream
force subit une poussée forcée.
Disons que j'ai cloné votre dépôt et que j'ai ajouté quelques commits comme ceci:
Sujet D ---- E
/
Développement A ---- B ---- C
Mais plus tard, la development
branche est frappée d'un rebase
, ce qui me fera recevoir une erreur comme celle-ci lorsque j'exécuterai git pull
:
Déballage des objets: 100% (3/3), c'est fait.
De <repo-location>
* développement de succursales -> FETCH_HEAD
Fusion automatique des <fichiers>
CONFLICT (contenu): fusionner le conflit dans <locations>
La fusion automatique a échoué; résoudre les conflits, puis valider le résultat.
Ici, je pouvais résoudre les conflits et commit
, mais cela me laisserait un historique de commit vraiment moche:
C ---- D ---- E ---- F sujet
/ /
A ---- B -------------- C 'développement
Cela peut sembler attrayant à utiliser, git pull --force
mais soyez prudent car cela vous laissera des commits bloqués:
Sujet D ---- E
Développement A ---- B ---- C '
Donc, la meilleure option est probablement de faire un git pull --rebase
. Cela me demandera de résoudre tout conflit comme avant, mais pour chaque étape, au lieu de valider, je l'utilise git rebase --continue
. Au final, l'historique des validations sera bien meilleur:
Sujet D '--- E'
/
Développement A ---- B ---- C '
Mise à jour 3: Vous pouvez également utiliser l' --force-with-lease
option comme une poussée de force "plus sûre", comme mentionné par Cupcake dans sa réponse :
La poussée forcée avec un "bail" permet l'échec de la poussée forcée s'il y a de nouveaux commits sur la télécommande que vous ne vous attendiez pas (techniquement, si vous ne les avez pas encore récupérés dans votre branche de suivi à distance), ce qui est utile si vous ne voulez pas écraser accidentellement les commits de quelqu'un d'autre que vous ne connaissiez même pas encore, et vous voulez juste écraser les vôtres:
git push <remote> <branch> --force-with-lease
Vous pouvez en savoir plus sur la façon d'utiliser --force-with-lease
en lisant l'un des éléments suivants:
git push origin --force
pas travaillé pour vous?