git: fusionar rama y usar mensaje de compromiso de fusión significativo?

4 minutos de lectura

Después de fusionar una rama de características con la rama principal, normalmente necesito realizar una confirmación de fusión de forma predeterminada. Pero me gustaría usar los mensajes de confirmación originales de mi rama de función en esta confirmación en lugar de “combinar rama XXX”.

¿Cómo debo hacer eso?

Solo pasa el -m parámetro a la merge dominio:

$ git merge other-branch -m "Commit Message"

  • ¿Esto no creará un mensaje nuevo como “mensaje de confirmación” en lugar de copiar el mensaje de confirmación de la rama de funciones?

    – Ricky-U

    23 de noviembre de 2021 a las 15:56

  • Hará esa combinación como una confirmación separada (sin avance rápido si es posible) con ese mensaje como el mensaje de confirmación.

    –Joe Zim

    26 de noviembre de 2021 a las 4:42

Básicamente tienes dos opciones.

Solución fácil: no fusionar, Rebase

Vuelva a establecer su rama sobre la rama principal, resuelva el conflicto y luego fusione. Como tendrá un historial directo, podrá avanzar rápidamente para fusionarse y esto no creará ningún fusionar compromiso.

git checkout feature
git rebase main
# Resolve conflict if there is
git checkout main
git merge feature

Segunda opción: Rebase -i

Puede editar su historial después de su fusión (antes de presionas a un control remoto). Puede administrar esto con el modo interactivo de rebase.

git checkout main
git merge feature
#You merge and resolve conflict
git rebase -i <sha of the commit before the merge>

Luego será llevado a un shell interactivo con la lista de confirmaciones, por ejemplo:

pick 73c991e Create progress bar module
pick b8a0b83 merge branch feature
pick 2120f47 Add user form
pick 70c55e4 Quiz prototype system

Solo necesitas agregar squash o s en vez de pick:

pick 73c991e Create progress bar module
pick b8a0b83 merge branch feature
s 2120f47 Add user form
pick 70c55e4 Quiz prototype system

Este comando aplastaría b8a0b83 y 2120f47. El siguiente paso será un editor de texto de confirmación donde ambos mensajes de confirmación se combinen, y ahora depende de usted editarlos correctamente para mantener solo su mensaje original.

  • Gracias. Uso mucho squash en una sola rama para combinar confirmaciones. Pero no sabía que las confirmaciones combinadas también se pueden aplastar. Gracias por el consejo.

    – kakyo

    22 de febrero de 2013 a las 18:15

  • Pensándolo bien, tengo curiosidad por saber por qué tengo que elegir rebase en lugar de fusionar. Estoy bastante contento con lo que hace merge excepto por el hecho de que no da el mensaje correcto. Descubrí que puedo “git ci –amend” para cambiarlo. Y de acuerdo con esta publicación: stackoverflow.com/questions/804115/git-rebase-vs-git-merge , rebase cambia el historial donde ramifiqué la rama de funciones. Me gustaría mantener esa historia.

    – kakyo

    22 de febrero de 2013 a las 18:28


  • Luego, también puede simplemente editar un mensaje de confirmación con git rebase -i. En lugar de usar squashuso único edit. No soy un gran protector de mantener el historial en Git, para mí, Git es un editor para escribir el historial de su proyecto, cómo tiene sentido y cómo es fácil de usar (por ejemplo, bisecar). Como tal, uso mucho rebase para mantener mi historial ordenado y útil; Puede que esta no sea tu opinión, pero estoy seguro de que eventualmente lo será.

    – Simón Boudrias

    22 de febrero de 2013 a las 18:57

avatar de usuario
ricardo nolde

Si la confirmación ya se ha realizado, simplemente enmendar el compromiso

Si antes de la confirmación, utilice un git merge como en el siguiente ejemplo:

$ git checkout mainBranch
$ git merge featureBranch --squash --no-commit

Puede que tenga que resolver conflictos.

Este método evita la confirmación automática y todos los archivos se dejan en el índice; por lo tanto, puede confirmar el código con cualquier mensaje de confirmación que desee.

Cuando tiene diferentes conjuntos de cambios en el maestro y la rama local, git crea una confirmación adicional para el unir automáticamente. Para evitar que ocurran tales confirmaciones adicionales, puede rebase el maestro en la rama antes de fusionarlo con el maestro.

$ git pull(in master which retrieves the new changes>
$ git checkout <local_branch>
$ git rebase master 
$ git checkout master
$ git merge local_branch.

Descubrí que después de hacer la confirmación de fusión. Puedo agregar una confirmación de enmienda “git ci –amend” para cambiar el mensaje de confirmación, que hace exactamente lo que pedí. Aceptaré mi propia respuesta como la respuesta correcta.

Simon Boudrias y ranendra dieron respuestas relevantes que también son efectivas de una manera diferente. Así que los voté.

¿Ha sido útil esta solución?