Question Déplacer un travail existant non engagé vers une nouvelle branche dans Git


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 la modification en cours?

Je veux réinitialiser ma branche actuelle tout en préservant le travail existant sur la nouvelle fonctionnalité.


2506
2017-09-08 15:57


origine


Réponses:


Utilisez le suivant:

git checkout -b <new-branch>

Cela laissera votre branche actuelle telle quelle, créera et vérifiera une nouvelle branche et gardera toutes vos modifications. Vous pouvez ensuite faire un commit avec:

git add <files>

et engagez votre nouvelle branche avec:

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

Les modifications apportées au répertoire de travail et les modifications apportées dans l'index n'appartiennent à aucune branche pour le moment. Cela change où ces changements se termineraient.

Tu n'as pas réinitialiser votre branche d'origine, elle reste comme elle est. Le dernier commit sur <old-branch> sera toujours le même. Par conséquent vous checkout -b et ensuite commettre.


2961
2017-09-08 15:59



Alternativement:

  1. Enregistrer les modifications en cours dans une mémoire temporaire:

    $ git stash

  2. Créez une nouvelle branche basée sur cette cachette, et passez à la nouvelle branche:

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

Astuce: utilisez la touche de tabulation pour réduire la saisie du nom de cachette.


253
2018-06-19 00:18



Si vous avez effectué des validations sur votre branche principale pendant que vous avez codé, mais vous voulez maintenant déplacer ces commits vers une branche différente:

  1. Copiez votre historique actuel sur une nouvelle branche, en apportant également les modifications non validées:

    git checkout -b <new-feature-branch>
    
  2. Maintenant, forcez la branche "désordonnée" d'origine à revenir en arrière: (sans passer à celle-ci)

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

    Par exemple:

    git branch -f master origin/master
    

    ou si vous avez fait 4 commits:

    git branch -f master HEAD~4
    

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

Une alternative est d'utiliser cette technique de réinitialisation. Mais ces instructions annulent tous les changements non validés que vous avez. Si vous voulez les conserver, rangez-les d'abord et désinstallez-les à la fin.


35
2018-02-12 07:44



Si vous le commettez, vous pouvez également sélectionner l'ID de validation unique. Je fais cela souvent quand je commence à travailler en master, et que je veux créer une branche locale avant de pousser jusqu'à mon origine.

git cherry-pick <commitID>

Il y a beaucoup de choses que vous pouvez faire avec des cerises, comme décrit ici, mais cela pourrait être un cas d'utilisation pour vous.


15
2017-11-30 20:58