web-dev-qa-db-fra.com

Git: Déplacer les changements de la branche principale

Question de base mais cela me arrive tout le temps:

  • Faire des changements dans un working-branch
  • Passer à master
  • git merge working-branch
  • git Push
  • cap deploy (à mettre en scène)
  • faire une nouvelle tasse de thé

ensuite, je reviens et je pense à autre chose et commence à faire des changements ... tout en restant en maîtrise.

Quel est un moyen facile d'être soit:

  1. empêcher les modifications directes sur le maître (avertissement peut-être)
  2. déplacer toutes les modifications à working-branch et clair master afin que je puisse continuer à modifier working-branch
  3. faire tourner les édits dans une branche entièrement nouvelle new-working-branch puis jeter working-branch?

A pris un risque et a essayé une recommandation dans la section "Branches" de "succursales" de cette page mais qui vient d'essuyer toutes mes modifications!?! Peut-être parce que après git branch dubious-experiment et git checkout master les git status sur les deux branches était identique (pas "propre" sur le maître). Donc git reset --hard <SHA1sum> a essuyé tous les changements sur les deux !?!

  git branch dubious-experiment

  M---N-----O----P---Q ("master" and "dubious-experiment")

  git checkout master

  # Be careful with this next command: make sure "git status" is
  # clean, you're definitely on "master" and the
  # "dubious-experiment" branch has the commits you were working
  # on first...

  git reset --hard <SHA1sum of commit N>
29
Meltemi

De votre description, je suppose que vous n'avez pas encore changé - est-ce correct?

Si oui, voici vos réponses:

Comment empêcher les modifications directes de maîtriser

Vous auriez besoin de définir cela dans votre éditeur, mais cela sera probablement difficile. Affichage de votre branche actuelle dans votre invite et votre éditeur aide beaucoup.

Comment déplacer les modifications en une nouvelle branche new-working-branch puis jeter working-branch

git checkout -b new-working-branch
git add …
git commit -m "mycommit" 

Comme vous n'avez pas encore commis quelque chose à maîtriser, vous n'avez plus besoin de changer quoi que ce soit sur Maître. Vous pouvez maintenant supprimer votre branche de travail si vous en avez envie.

Comment déplacer les modifications sur working-branch

git checkout -b temp-branch
git add …
git commit -m "mycommit" 
git rebase --onto working-branch master
git checkout working-branch
git reset --hard temp-branch
git branch -d temp-branch

Si vos modifications ne sont pas en conflit avec des modifications qui sont en maîtrise, mais pas en branche de travail, cela peut être fait beaucoup plus simple:

git stash
git checkout working-branch
git stash pop
30
Chronial

Si vous avez déjà commis vos modifications à master mais n'a pas appuyé à un endroit ...

créer une nouvelle branche pour les dernières modifications

git checkout -b newfeat master

replayez tous les changements (déplacez les commentaires) sur votre working-branch branche

git rebase --onto working-branch Origin/master newfeat

passer à la branche master et réinitialisez-la à l'état de la dernière poussée

git checkout master
git reset --hard Origin/master

À ce stade, vous avez:

  • master pointant vers le dernier commit poussé (Origin/master)
  • working-branch jamais changé
  • une nouvelle succursale newfeat contenant tous les nouveaux engagements et est en avance sur working-branch.
6
KurzedMetal

Je recommande généralement le paramètre GIT suivant:

git config Push.default nothing

Avec cela, vous devez au moins nommer la succursale lorsque vous appuyez sur. Cela ne vous empêchera pas de vous engager à maîtriser localement, mais lorsque vous vous rendez compte que vous avez, vous pouvez déplacer ceux qui s'engagent à une succursale sans affecter personne d'autre.

0
Rob Starling

J'ai utilisé pour des cas similaires:

git branch -f <branch-name>
git checkout <branch-name>

ou

git checkout -B <branch-name>

.

Les deux variantes déplacent la branche branch-name À votre commission actuelle avec la réinitialisation - dur votre arbre.

0
Patrick B.