web-dev-qa-db-fra.com

Git rebase (Merge Squash) ma branche de fonctionnalité sur une autre branche

Je recherche une commande git pour m'aider avec mes branches de fonctionnalités lorsqu'elles sont prêtes à entrer dans Master. Cette commande git écraserait toutes mes modifications sur ma branche en un seul commit au-dessus de master. Je le fais aujourd'hui avec:

git rebase Origin/master
git rebase -i HEAD~4

Où 4 est le nombre de validations de squash. Cependant, cela nécessite que je sache combien de commits j'ai. Je fais cela aujourd'hui en exécutant:

git log HEAD...Origin/master

puis compter les commits.

Je pense qu'il devrait y avoir une meilleure façon de procéder. Ou est-ce ainsi que tout le monde le fait aussi?

52
John Hinnegan

Tout ce que tu dois faire est:

git checkout feature_branch
git rebase master
git checkout master
git merge --squash feature_branch

Comme docs pour git merge --squash dire:

Produisez l'arborescence de travail et l'état d'index comme si une fusion réelle s'était produite (à l'exception des informations de fusion), mais ne faites pas de validation ni ne déplacez la tête, ni n'enregistrez $ GIT_DIR/MERGE_HEAD pour que la prochaine commande git commit crée une fusion commettre. Cela vous permet de créer un seul commit au-dessus de la branche actuelle dont l'effet est identique à la fusion d'une autre branche (ou plus dans le cas d'une pieuvre).

Après cela, vous pouvez git commit vos modifications déjà en cours.

88
eckes

Voici ce que je fais, issu d'une longue expérience de travail dans de plus grandes équipes:

# Get latest from master
git checkout master
git pull --rebase

# rebase master into your feature branch
git checkout feature/my-feature
git rebase master --preserve-merges

# merge feature into master
git checkout master

# DO ONLY ONE of the 2 options below
# if you only have one or (maybe) 2 commits in your feature branch
git merge feature/my-feature

# OR
# this forces an empty merge commit (useful if we need to roll things back)
git merge --no-ff feature/my-feature

# if you use Github, this should also close the pull request
git Push Origin master

J'espère que cela t'aides!

14
rupakg

Je pense que vous cherchez git merge --squash. Il doit importer les validations de votre branche de fonctionnalité dans master et les écraser, afin que vous puissiez créer une seule validation.

2
manojlds