Question de base mais cela me arrive tout le temps:
working-branch
master
git merge working-branch
git Push
cap deploy
(à mettre en scène)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:
working-branch
et clair master
afin que je puisse continuer à modifier working-branch
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>
De votre description, je suppose que vous n'avez pas encore changé - est-ce correct?
Si oui, voici vos réponses:
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.
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.
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
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énewfeat
contenant tous les nouveaux engagements et est en avance sur working-branch
.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.
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.