Cherry escoge lo bueno de dos commits, luego crea un nuevo tercer commit

Aquí está la situación:

  1. DevA hizo buenas adiciones a SomeFile.txt, luego se comprometió, y luego presionó (AAA)
  2. DevB sacó, editó las adiciones que DevA hizo, comprometió y luego presionó (BBB)
  3. DevC sacó y quiere conservar parte de lo que DevA hizo y parte de lo que DevB hizo.

¿Cómo puede DevC cherry elegir cambios de AAA y BBB para crear un nuevo compromiso CCC?

Algunas notas:

  • No queremos reescribir la historia.
  • AAA se fusionaría limpiamente con BBB.

Gráfico ASCII

CCC (should include GoodIdeaA and GoodIdeaB) | | BBB (added GoodIdeaB, in the process deleted GoodIdeaA) | / AAA (added GoodIdeaA) 

Tenga en count que BBB se realizó mediante una operación de copyr y pegar al por mayor . Debería haberse hecho a través de una fusión.

Si desea tomar partes individuales de las confirmaciones, puede usar git cherry-pick con la opción -n para evitar agregar una confirmación:

  -n, --no-commit Usually the command automatically creates a sequence of commits. This flag applies the changes necessary to cherry-pick each named commit to your working tree and the index, without making any commit. In addition, when this option is used, your index does not have to match the HEAD commit. The cherry-pick is done against the beginning state of your index. This is useful when cherry-picking more than one commits' effect to your index in a row. 

Entonces algo como esto:

 git cherry-pick -n AAA git cherry-pick -n BBB # Edit, clean up git commit -m CCC