Déplacer existant, le travail non validé à une nouvelle branche dans Git
J'ai commencé à travailler sur une nouvelle fonctionnalité et après codage, pour un peu, j'ai décidé cette fonctionnalité devrait être sur sa propre branche.
Comment puis-je déplacer les modifications non validées à une nouvelle direction et réinitialiser mon actuel?
Je veux réinitialiser mon actuel de la branche, tout en préservant les travaux sur la nouvelle fonctionnalité.
Vous devez vous connecter pour publier un commentaire.
Utiliser les éléments suivants:
Votre courant de la branche est, de créer et de commander une nouvelle branche et de garder toutes vos modifications. Vous pouvez alors faire un commit avec:
et de s'engager à votre nouvelle succursale:
Les changements dans le répertoire de travail et les changements mis en scène dans l'indice n'appartient pas à l'une des succursales encore. Cela change où ces modifications ne.
Vous n'avez pas réinitialiser original de votre branche, il reste comme il est. Le dernier commit sur
<old-branch>
sera toujours le même. Par conséquent, vouscheckout -b
puis valider.git checkout -b <new branch>
changements où ces modifications ne.git checkout -b <new-branch>
, puis, sans s'engager, revenir à la branche principale et lagit checkout -- <modified file>
et elle a emporté des changements sur les deux branches. 🙁 No big deal, pas beaucoup de changements, mais la leçon.error: Your local changes to the following files would be overwritten by checkout:
lorsque j'essaie de passer les branches?git checkout -- .
ougit checkout .
je suis surpris que personne n'a commenté à ce sujet déjà.git checkout .
/git reset --hard
sera unrecoverably supprimer eux-b
drapeau). Si les fichiers en question n'ont pas été modifiées entre les branches n'ont pas été modifiées, cela fonctionnera très bien. Toutefois, s'ils ont été modifiés, git checkout abandonner et vous devrez stash/checkout/unstash.git add .
, comment puis-je déplacer les fichiers vers une nouvelle direction?git checkout -b new-branch-name
git commit -m "My New Feature"
et je veux le déplacer (la validation avec tous les fichiers) sur une nouvelle branchemy_ new_feature_branch
?git branch new-branch
ougit checkout -b new-branch
pour passer branches immédiatement). Vous aurez alors une nouvelle branche exactement à la validation que vous souhaitez. Si vous ne voulez pas avoir le commit sur la branche master, vous devez déplacer la branche en un commit, soit à l'aide degit branch -f master master^
ougit checkout master && git reset (--hard) master^
(attention,reset --hard
va supprimer tous les changements de manière irrévocable)Sinon:
Enregistrer les modifications en cours pour un temp stash:
$ git stash
Créer une nouvelle branche basée sur cette cachette, et de passer à la nouvelle branche:
$ git stash branch <new-branch> stash@{0}
Astuce: utilisez la touche de tabulation pour réduire tapant la cachette nom.
git stash apply
.git checkout -b <new branch name>
git stash apply
)git add -A
avant de vousgit stash
git add -A
avant de l'accrocher.@{0}
veux dire?@{0}
signifie que vous souhaitez que le dernier commit à une branche particulière (par exemple,master@{0}
par exemple; de plus à lire ici: git-scm.com/book/en/v2/Git-Tools-Revision-Selection )Si vous avez fait s'engage sur votre branche principale pendant que vous codés, mais maintenant vous voulez déplacer ceux s'engage à une autre branche, c'est un moyen rapide:
Copie actuelle de votre histoire dans une nouvelle direction, d'apporter toutes les modifications non validées trop:
Maintenant la force de l'original "désordre" de la branche de revenir: (sans changer)
Par exemple:
ou si vous avez fait 4 s'engage à:
Avertissement:
git branch -f master origin/master
sera réinitialiser les informations de suivi pour la branche. Donc, si vous avez configuré votremaster
branche pour le pousser à quelque part d'autre queorigin/master
alors que la configuration sera perdue.Avertissement: Il y a aussi un danger si vous rebase après la ramification, qui est décrit ici. Le seul moyen d'éviter cela est de créer une nouvelle histoire à l'aide de cherry-pick. Ce lien explique la plus sûre méthode imparable. Si vous avez des modifications non validées, vous pouvez
git stash
au début et à lagit stash pop
à la fin.Le scénario commun est le suivant: j'ai oublié de créer la nouvelle branche pour la nouvelle fonctionnalité, et était en train de faire tout le travail dans la vieille branche. J'ai commis tous les "vieux" du travail à la branche master, et je veux que ma nouvelle succursale à croître à partir du "maître". Je n'ai pas fait un seul commit de mon nouveau travail.
Voici la structure de branche:
"maître"->"Old_feature"
Si vous vous engagez, vous pouvez également choisir le commit unique d'identification. Je le fais souvent quand j'ai commencer à travailler en maître, et que vous souhaitez créer une branche locale avant de me pousser jusqu'à mon origine/.
Il ya beaucoup que vous pouvez faire avec cherry-pick, comme décrit ici, mais cela pourrait être un cas d'utilisation pour vous.
J'ai utilisé @Robin réponse & lister tout ce que j'ai fait,
! Si le repo a plus d'une cachette, de voir celui qui s'applique au nouveau-branche:
et inspecter les ranger par,
Ou d'inspecter tous les caches à la fois:
Il est en fait vraiment un moyen facile de le faire avec GitHub Bureau maintenant que je ne crois pas a une fonction avant.
Tout ce que vous devez faire est de passer à la nouvelle succursale dans le GitHub de Bureau, et il vous invite à laisser vos modifications sur la branche courante (qui sera caché), ou à apporter vos modifications avec vous pour la nouvelle branche. Il suffit de choisir la deuxième option, à apporter des modifications à la nouvelle direction générale. Vous pouvez ensuite valider comme d'habitude.
Cela peut être utile pour tous à l'aide d'outils GIT
Commande
Commutateur de direction - il déplacer vos modifications à la nouvelle-branche. Ensuite, vous pouvez valider les modifications.
TortoiseGIT
Clic-droit sur votre dépôt et ensuite utiliser TortoiseGit->Switch/Checkout
SourceTree
Utiliser le bouton "commander" pour passer de la branche. Vous verrez le bouton "commander" en haut après avoir cliqué sur une branche. Les changements de la branche courante sera appliqué automatiquement. Ensuite, vous pouvez les valider.