D'autres réponses semblaient incomplètes.
J'ai essayé ci-dessous en entier, et cela a bien fonctionné.
REMARQUE:
1. Faites une copie de votre référentiel avant d'essayer ci-dessous, par sécurité.
Détails:
1. Tout le développement se produit dans la branche de développement
2. La branche qa est exactement la même copie de développement
3. De temps en temps, le code de développement doit être déplacé / écrasé dans la branche qa
nous devons donc écraser la branche qa, de la branche dev
Partie 1:
Avec les commandes ci-dessous, l'ancien qa a été mis à jour vers le nouveau dev:
git checkout dev
git merge -s ours qa
git checkout qa
git merge dev
git push
Le commentaire automatique pour la dernière poussée donne ci-dessous:
// Output:
// *<MYNAME> Merge branch 'qa' into dev,*
Ce commentaire est inversé, car la séquence ci-dessus est également inversée
Partie 2:
Ci-dessous sont inattendus, de nouveaux commits locaux en dev, les inutiles
donc, nous devons les jeter et les rendre intacts.
git checkout dev
// Output:
// Switched to branch 'dev'
// Your branch is ahead of 'origin/dev' by 15 commits.
// (use "git push" to publish your local commits)
git reset --hard origin/dev
// Now we threw away the unexpected commits
Partie 3:
Vérifiez que tout est comme prévu:
git status
// Output:
// *On branch dev
// Your branch is up-to-date with 'origin/dev'.
// nothing to commit, working tree clean*
C'est tout.
1. l'ancien qa est maintenant écrasé par le nouveau code de branche de développement
2. local est propre (origine distante / dev est intacte)