J'ai commencé à travailler sur une nouvelle fonctionnalité et après avoir codé un peu, j'ai décidé que cette fonctionnalité devrait être sur sa propre branche.
Comment déplacer les modifications non validées existantes vers une nouvelle branche et réinitialiser ma modification actuelle?
Je souhaite réinitialiser ma branche actuelle tout en préservant le travail existant sur la nouvelle fonctionnalité.
git
git-branch
git-stash
git-reset
Dane O'Connor
la source
la source
Réponses:
Utilisez le suivant:
Cela laissera votre branche actuelle telle qu'elle est, créera et retirera une nouvelle branche et conservera toutes vos modifications. Vous pouvez ensuite effectuer des modifications dans les fichiers à valider avec:
et engagez-vous dans votre nouvelle succursale avec:
Les changements dans le répertoire de travail et les changements dans l'index n'appartiennent à aucune branche pour le moment. Cela change la branche où ces modifications se termineraient.
Vous ne réinitialisez pas votre branche d'origine, elle reste telle quelle. Le dernier commit
<old-branch>
sera toujours le même. Par conséquent, vouscheckout -b
et ensuite vous engagez.Mise à jour 2020 / Git 2.23
Git 2.23 ajoute la nouvelle
switch
sous-commande pour tenter de dissiper une partie de la confusion qui vient de l'utilisation surchargée decheckout
(changement de branche, restauration de fichiers, détachement de HEAD, etc.)À partir de cette version de Git, remplacez la commande ci-dessus par:
Le comportement est identique et reste inchangé.
la source
git checkout -b <new branch>
changements où ces changements se termineraient.git checkout .
/git reset --hard
se unrecoverably enlever lesAlternativement:
Enregistrez les modifications actuelles dans une réserve temporaire:
$ git stash
Créez une nouvelle branche basée sur cette réserve et basculez vers la nouvelle branche:
$ git stash branch <new-branch> stash@{0}
Astuce: utilisez la touche de tabulation pour réduire la saisie du nom de la cachette.
la source
git stash apply
.git checkout -b <new branch name>
git add -A
avant de ranger.Si vous avez effectué des validations sur votre branche principale pendant que vous avez codé, mais que vous souhaitez maintenant déplacer ces validations vers une autre branche, voici un moyen rapide:
Copiez votre historique actuel sur une nouvelle branche, en apportant également toutes les modifications non validées:
Maintenant, forcez la branche d'origine "en désordre" à revenir en arrière: (sans y basculer)
Par exemple:
ou si vous aviez fait 4 commits:
Avertissement:
git branch -f master origin/master
vous réinitialiser les informations de suivi pour cette branche. Donc, si vous avez configuré votremaster
branche pour pousser ailleurs,origin/master
cette configuration sera perdue.Avertissement: Il existe également un danger si vous rebasez après la ramification, ce qui est décrit ici . La seule façon d'éviter cela est de créer une nouvelle histoire à l'aide de la sélection de cerise. Ce lien décrit la méthode infaillible la plus sûre . Si vous avez des modifications non validées, vous voudrez peut-être
git stash
au début etgit stash pop
à la fin.la source
Le scénario courant est le suivant: j'ai oublié de créer la nouvelle branche pour la nouvelle fonctionnalité et je faisais tout le travail dans l'ancienne branche de fonctionnalité. J'ai confié tous les "anciens" travaux à la branche maître, et je veux que ma nouvelle branche se développe à partir du "maître". Je n'ai fait aucun engagement de mon nouveau travail. Voici la structure de la branche: "master" -> "Old_feature"
la source
Si vous le validez, vous pouvez également sélectionner le seul ID de validation. Je le fais souvent lorsque je commence à travailler en master, puis je souhaite créer une branche locale avant de pousser vers mon origine /.
Il y a beaucoup de choses que vous pouvez faire avec la sélection de cerises, comme décrit ici , mais cela pourrait être un cas d'utilisation pour vous.
la source
Il existe en fait un moyen très simple de le faire avec GitHub Desktop maintenant que je ne pense pas que c'était une fonctionnalité auparavant.
Tout ce que vous avez à faire est de basculer vers la nouvelle branche dans GitHub Desktop, et cela vous invitera à laisser vos modifications sur la branche actuelle (qui sera cachée), ou à apporter vos modifications avec vous à la nouvelle branche. Choisissez simplement la deuxième option, pour apporter les modifications à la nouvelle branche. Vous pouvez ensuite vous engager comme d'habitude.
la source
Cela peut être utile pour tous ceux qui utilisent des outils pour GIT
Commander
Changer de branche - il déplacera vos modifications vers new-branch. Ensuite, vous pouvez valider les modifications.
TortoiseGIT
Faites un clic droit sur votre référentiel puis utilisez TortoiseGit-> Switch / Checkout
SourceTree
Utilisez le bouton "Commander" pour changer de branche. Vous verrez le bouton "caisse" en haut après avoir cliqué sur une branche. Les modifications de la branche actuelle seront appliquées automatiquement. Ensuite, vous pouvez les valider.
la source
J'ai utilisé @Robin answer & listing tout ce que j'ai fait,
! Si le dépôt a plus d'une cachette, voyez celle à appliquer à la nouvelle branche:
et inspecter la réserve individuelle par,
Ou inspectez toutes les réserves en même temps:
la source