C'est ce que j'utilise souvent:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
Notez qu'il est bon de ne pas apporter des modifications à votre maître local / développer la branche, mais la caisse à une autre branche pour tout changement, avec le nom de la branche préfixé par le type de changement, par exemple feat/
, chore/
, fix/
, etc. Ainsi il vous suffit de tirer les changements, pas pousser les changements du maître. Même chose pour les autres branches auxquelles d'autres contribuent. Donc, ce qui précède ne doit être utilisé que si vous avez validé des modifications dans une branche sur laquelle d'autres se sont engagées et doivent être réinitialisées. Sinon, à l'avenir, évitez de pousser vers une branche vers laquelle d'autres poussent, au lieu de payer et de pousser vers ladite branche via la branche extraite.
Si vous souhaitez réinitialiser votre branche locale à la dernière validation de la branche en amont, ce qui fonctionne pour moi jusqu'à présent est:
Vérifiez vos télécommandes, assurez-vous que votre amont et votre origine correspondent à ce que vous attendez, sinon comme prévu, puis utilisez git remote add upstream <insert URL>
, par exemple, le référentiel GitHub d'origine que vous avez créé, et / ou git remote add origin <insert URL of the forked GitHub repo>
.
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
Sur GitHub, vous pouvez également extraire la branche portant le même nom que la branche locale, afin d'y enregistrer le travail, bien que cela ne soit pas nécessaire si le développement d'origine a les mêmes modifications que la branche de travail enregistré locale. J'utilise la branche de développement comme exemple, mais il peut s'agir de n'importe quel nom de branche existant.
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
Ensuite, si vous devez fusionner ces modifications avec une autre branche alors qu'il y a des conflits, en conservant les modifications dans develop, utilisez:
git merge -s recursive -X theirs develop
Pendant l'utilisation
git merge -s recursive -X ours develop
pour conserver les modifications conflictuelles de branch_name. Sinon, utilisez un mergetool avec git mergetool
.
Avec tous les changements ensemble:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
Notez qu'au lieu de amont / développement, vous pouvez utiliser un hachage de validation, un autre nom de branche, etc. Utilisez un outil CLI tel que Oh My Zsh pour vérifier que votre branche est verte indiquant qu'il n'y a rien à valider et que le répertoire de travail est propre ( confirmée ou vérifiable par git status
). Notez que cela peut réellement ajouter des validations par rapport au développement en amont s'il y a quelque chose ajouté automatiquement par une validation, par exemple des diagrammes UML, des en-têtes de licence, etc., donc dans ce cas, vous pouvez ensuite appliquer les modifications origin develop
à upstream develop
, si nécessaire.
git status
votre deuxième commande agit reset --hard HEAD
échoué. Vous n'avez pas collé sa sortie, cependant. → Question incomplète.