Git rebase (Merge Squash) mi rama de característica en otra rama


Estoy buscando un comando git que me ayude con mis ramas de características cuando estén listas para entrar en Master. Este comando git aplastaría todos mis cambios en mi rama en un solo commit encima de master. Hago esto hoy con:

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

Donde 4 es el número de commits para squash. Sin embargo, esto requiere que sepa cuántos commits tengo. Hago esto hoy corriendo:

git log HEAD...origin/master

Y luego contando las confirmaciones.

Siento que debería haber una mejor manera de hacer esto. ¿O es así como todos los demás lo hacen también?

Author: Abhijeet, 2012-03-08

3 answers

Todo lo que tienes que hacer es:

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

Como los docs para git merge --squash dicen:

Produce el árbol de trabajo y el estado del índice como si se hubiera producido una fusión real (excepto por la información de fusión), pero en realidad no hagas una confirmación o muevas la CABECERA, ni grabes $GIT_DIR/MERGE_HEAD para hacer que el siguiente comando git commit cree una confirmación de fusión. Esto le permite crear un solo commit encima de la rama actual cuyo efecto es el mismo que fusionar otra rama (o más en el caso de pulpo).

Después de eso, puede git commit sus cambios que ya están preparados.

 87
Author: eckes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-09 06:31:39

Esto es lo que hago, recopilado de mucha experiencia trabajando en equipos más grandes:

# 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

Espero que esto ayude!

 13
Author: rupakg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-05 14:55:54

Creo que estás buscando git merge --squash. Debería traer las confirmaciones de tu rama de características a master y aplastarlas, para que puedas crear una única confirmación.

 2
Author: manojlds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-08 17:47:37