web-dev-qa-db-fra.com

Créer une branche Git avec les modifications actuelles

J'ai commencé à travailler sur ma branche master en pensant que ma tâche serait facile. Après un moment, j'ai réalisé que cela prendrait plus de travail et je veux faire tout ce travail dans une nouvelle branche.

Comment puis-je créer une nouvelle branche et prendre toutes ces modifications avec moi sans salir master?

743

Si vous n'avez pas encore fait de commit, seulement (1: branche) et (3: checkout) suffiraient.
Ou en une seule commande: git checkout -b newBranch

Comme indiqué dans la _git reset_ page de manuel :

_$ git branch topic/wip     # (1)
$ git reset --hard HEAD~3  # (2)  NOTE: use $git reset --soft HEAD~3 (explanation below)
$ git checkout topic/wip   # (3)
_
  1. Vous avez commis des commits, mais vous réalisez qu'ils étaient prématurés dans la branche "master". Vous voulez continuer à les polir dans une branche de sujet, créez donc une branche "_topic/wip_" à partir du HEAD actuel.
  2. Rembobinez la branche master pour supprimer ces trois commits.
  3. Passez à la branche "_topic/wip_" et continuez à travailler.

Remarque: en raison de l'effet "destructif" d'une commande _git reset --hard_ (elle réinitialise l'index et l'arbre de travail. Toute modification apportée aux fichiers suivis dans l'arbre de travail depuis _<commit>_ est ignorée). avec:

_$ git reset --soft HEAD~3  # (2)
_

Cela ferait en sorte que je ne perde aucun fichier privé (non ajouté à l'index).
L'option _--soft_ ne touche ni le fichier d'index ni l'arborescence de travail (mais réinitialise la tête à _<commit>_, comme tous les modes).

606
VonC

Comme indiqué dans cette question: Git: créer une branche à partir de modifications non étiquetées/non validées sur le maître : stash n'est pas nécessaire.

Il suffit d'utiliser:

git checkout -b topic/newbranch

Tout travail non engagé sera pris en charge par la nouvelle agence.

Si vous essayez de pousser vous obtiendrez le message suivant

fatal: La fonction de branche actuelle/NEWBRANCH n'a pas de branche en amont. Pour pousser la branche actuelle et définir la télécommande comme étant en amont, utilisez

git Push --set-upstream Origin feature/feature/NEWBRANCH

Faites juste comme suggéré pour créer la branche à distance:

git Push --set-upstream Origin feature/feature/NEWBRANCH

238
EeKay

Suivez ces étapes:

  1. Créer une nouvelle branche:

    git branch newfeature
    
  2. Commander une nouvelle branche: (cela ne réinitialisera pas votre travail.)

    git checkout newfeature
    
  3. Commencez maintenant votre travail sur cette nouvelle branche:

    git commit -s
    

En utilisant les étapes ci-dessus, votre branche d'origine restera propre et vous ne devrez pas effectuer de 'réinitialisation git - dure'.

67
AvadhP

Comme vous n'avez pas encore effectué de commits, vous pouvez enregistrer toutes vos modifications dans la réserve, créer et basculer vers une nouvelle branche, puis réinsérer ces modifications dans votre arbre de travail:

git stash  # save local modifications to new stash
git checkout -b topic/newbranch
git stash pop  # apply stash and remove it from the stash list
21
Ether

Pour ajouter de nouvelles modifications à une nouvelle branche et à Push to remote:

git branch branch/name
git checkout branch/name
git Push Origin branch/name

Souvent, j'oublie d'ajouter la partie d'origine à Push et je ne comprends pas pourquoi je ne vois pas la nouvelle branche/commit dans bitbucket

10
Patrick Schaefer