Question

J'ai commencé un travail sur une nouvelle fonctionnalité et après codage pour un peu, j'ai décidé cette fonction devrait être sur sa propre branche.

Comment puis-je déplacer les modifications non validées existantes à une nouvelle branche et réinitialiser mon actuel?

Je veux rétablir ma branche actuelle tout en préservant les travaux existants sur la nouvelle fonction.

Était-ce utile?

La solution

Utilisez les éléments suivants:

git checkout -b <new-branch>

Cela laissera votre succursale en est, créer et extraira une nouvelle branche et de garder toutes vos modifications. Vous pouvez alors faire un commit avec:

git add <files>

et engager à votre nouvelle branche avec:

git commit -m "<Brief description of this commit>"

Les changements dans le répertoire de travail et les changements mis en scène dans l'indice ne fait pas partie à une branche encore. Cela change où ces changements se terminerait par.

Vous ne faites pas reset votre branche d'origine, il reste tel qu'il est. La dernière validation sur <old-branch> sera toujours le même. Par conséquent, vous checkout -b puis engager.

Autres conseils

Vous pouvez également:

  1. Enregistrer les modifications en cours à une planque de temp:

    $ git stash

  2. Créer une nouvelle branche à partir de cette planque, et passer à la nouvelle branche:

    $ git stash branch <new-branch> stash@{0}

Astuce:. Utilisez la touche de tabulation pour réduire en tapant le nom de Stash

Si vous avez fait des commits sur votre branche principale pendant que vous codées, mais vous voulez maintenant déplacer ces commits à une autre branche:

  1. Copier votre histoire actuelle sur une nouvelle branche, apportant des modifications non validées aussi:

    git checkout -b <new-feature-branch>
    
  2. Maintenant forcer la branche "désordre" original pour faire reculer: (sans passer à elle)

    git branch -f <previous-branch> <earlier-commit-id>
    

    Par exemple:

    git branch -f master origin/master
    

    ou si vous aviez fait 4 commits:

    git branch -f master HEAD~4
    

Attention: Il semble que git branch -f master origin/master sera réinitialiser les informations de suivi pour cette branche. Donc, si vous avez configuré votre branche master pour pousser à un endroit autre que origin/master alors que la configuration sera perdue.

Une alternative est d'utiliser cette technique réinitialisation . Mais ces instructions annuler les modifications non validées que vous avez. Si vous voulez garder ceux-ci, de les placer d'abord et les unstash à la fin.

Le scénario commun est la suivante: j'ai oublié de créer la nouvelle branche pour la nouvelle fonctionnalité, et fait tout le travail dans l'ancienne branche de fonctionnalité. J'ai commis tous les « vieux » travail à la branche principale, et je veux que ma nouvelle branche de croître à partir du « maître ». Je ne l'ai pas fait un seul commettras de mon nouveau travail. Voici la structure de la branche: "Maître" -> "Old_feature"

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply

Si vous vous engagez, vous pourriez aussi écrémer l'ID unique engagement. Je le fais souvent quand je commence à travailler dans le maître, et que vous souhaitez créer une branche locale avant de pousser jusqu'à mon origine /.

git cherry-pick <commitID>

Il y a beaucoup que vous pouvez faire avec écrémer, comme décrit , mais cela pourrait être un cas d'utilisation pour vous.

je @Robin réponse et liste tout ce que je faisais,

git status                               <-- review/list uncommitted changes
git stash                                <-- stash uncommitted changes
git stash branch <new-branch> stash@{1}  <-- create a branch from stash
git add .                                <-- add local changes
git status                               <-- review the status; ready to commit
git commit -m "local changes ..."        <-- commit the changes
git branch --list                        <-- see list of branches incl the one created above
git status                               <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch>                <-- switch back
!

Si la pension a plus d'une planque, voir lequel d'appliquer à la nouvelle branche:

git stash list  
  stash@{0}: WIP on ...  
  stash@{1}: WIP on ...

et inspecter la planque individuelle par,

git stash show stash@{1}

Ou inspecter tous stashes à la fois:

git stash list -p

Il est en fait un moyen très facile de le faire avec GitHub Desktop maintenant que je ne crois pas était une caractéristique auparavant.

Tout ce que vous devez faire est de passer à la nouvelle branche dans GitHub Desktop, et il vous invite à laisser vos changements sur la branche en cours (qui sera planqué), ou d'apporter vos modifications avec vous à la nouvelle succursale. Il suffit de choisir la deuxième option, d'apporter les modifications apportées à la nouvelle branche. Vous pouvez alors engager comme d'habitude.

Cela peut être utile pour tous les outils à l'aide pour GIT

Commande

branche Switch - elle se déplacera vos modifications à la nouvelle succursale. Ensuite, vous pouvez valider les modifications.

 $ git checkout -b <new-branch>

TortoiseGit

Faites un clic droit sur votre référentiel, puis utilisez TortoiseGit-> Switch / Commander

entrer la description d'image ici

sources du

Utilisez le bouton « Commander » pour changer la branche. Vous verrez le bouton « caisse » en haut après avoir cliqué sur une branche. Les changements de la branche en cours seront automatiquement appliqués. Ensuite, vous pouvez les engager.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top