Uso de git v1.7.1 Estoy tratando de hacer una rebase con las características --preserve-merges
y --onto
al mismo tiempo. Los resultados finales parecen sin compromisos de fusión, por lo que parecen lineales. Prefiero preservar las asignaciones de fusión, por la misma razón que la gente a menudo usaría --preserve-merges
(más fácil ver el grupo de confirmaciones que lógicamente era una función separada y desarrollada en su propia rama).git rebase "--preserve-merges --onto" no conserva las fusiones
Mi rama principal (el destino para el rebase) es aburrido:
A-B-C
La rama de la característica que quiero tomar de una rama tiene sub-característica que se ha fusionado en él. Como:
X - Y
/ \
V-W ------ Z
donde z es una combinación de cometer que es la cabeza de la rama de la característica para tomar de, y X e Y eran en una rama sub-característica.
que estoy usando: git rebase --preserve-merges --onto C V Z
Me gustaría terminar con:
X - Y
/ \
A-B-C-W ------ Z
Pero en vez estoy recibiendo:
A-B-C-W-X-Y
Desde Z era un conflictivo fusión gratuita, el estado final del código es correcto, pero la historia no es tan expresiva como me gustaría.
¿Hay alguna manera de obtener lo que quiero?
corregir a la dirección @Bombe: Escribí un script bash para construir mi ejemplo. En mi sistema (RHEL 6.2 con git 1.7.1) esto demuestra mi problema.
#! /bin/bash
# start a new empty repo
git init
# make some commits on the master branch
git checkout master
touch A.txt; git add A.txt; git commit -m "add A.txt"; git tag Atag
touch B.txt; git add B.txt; git commit -m "add B.txt"; git tag Btag
touch C.txt; git add C.txt; git commit -m "add C.txt"; git tag Ctag
# now build the feature branch
# start at Btag (more or less arbitrary; point is it's before C)
git checkout Btag
git checkout -b feature
touch V.txt; git add V.txt; git commit -m "add V.txt"; git tag Vtag
touch W.txt; git add W.txt; git commit -m "add W.txt"; git tag Wtag
# now a subfeature
git checkout -b subfeature
touch X.txt; git add X.txt; git commit -m "add X.txt"; git tag Xtag
touch Y.txt; git add Y.txt; git commit -m "add Y.txt"; git tag Ytag
# merge the subfeature into the feature
# preserves branch history with --no-ff
git checkout feature
git merge --no-ff subfeature
# the merge commit is our Z
git tag Ztag
# one more commit so that merge isn't the tip (for better illustration of Z missing later)
touch postZ.txt; git add postZ.txt; git commit -m "add postZ.txt"; git tag postZtag
# now do the rebase
git rebase --preserve-merges --onto Ctag Vtag
# optionally move the master branch forward to the top of feature branch
git checkout master
git merge feature
Antes de que el rebase me sale:
X-Y
/ \
V-W-----Z-postZ
/
A-B-C
Después de que el rebase me sale:
X-Y
/ \
V-W-----Z-postZ
/
A-B-C-W'-X'-Y'-postZ'
nota la falta de Z 'entre Y' y postZ'.
He editado la publicación original para proporcionar los pasos para reproducir mi problema. Estoy seguro de que tienes razón, pero no veo lo que estoy haciendo mal. – RaveTheTadpole
Y de hecho tengo una versión más grande que 1.7.5.2. :) – Bombe