Estoy fallando en entender como usar git-rebase, y considero el siguiente ejemplo.
Vamos a empezar un repositorio en ~/tmp/repo:
$ git init
Luego agrega un archivo foo
$ echo "hello world" > foo
que luego se agrega y se compromete:
$ git add foo
$ git commit -m "Added foo"
A continuación, comencé un repositorio remoto. En ~/tmp/bare.git corrí
$ git init --bare
Para enlazar repo a bare.git corrí
$ git remote add origin ../bare.git/
$ git push --set-upstream origin master
A continuación, vamos a la rama, agregue un archivo y establezca un flujo ascendente para la nueva rama b1:
$ git checkout -b b1
$ echo "bar" > foo2
$ git add foo2
$ git commit -m "add foo2 in b1"
$ git push --set-upstream origin b1
Ahora es el momento de volver a master y cambiar algo allí:
$ echo "change foo" > foo
$ git commit -a -m "changed foo in master"
$ git push
En este punto en master el archivo foo Contiene cambiado foo , mientras en b1 aún es Hola Mundo . Finalmente, quiero sincronizar. b1 con el progreso realizado en master.
$ git checkout b1
$ git fetch origin
$ git rebase origin/master
En este punto git st devoluciones:
# On branch b1
# Your branch and 'origin/b1' have diverged,
# and have 2 and 1 different commit each, respectively.
# (use "git pull" to merge the remote branch into yours)
#
nothing to commit, working directory clean
En este punto el contenido de foo en la rama b1 es cambiar foo también. Entonces, ¿qué significa esta advertencia? Esperaba que hiciera una git push, Git sugiere hacer git pull... De acuerdo a esta respuesta , esto es más o menos eso, y en su comentario @FrerichRaabe dice explícitamente que no necesito hacer un tirón. ¿Que está pasando aqui? ¿Cuál es el peligro, cómo se debe proceder? ¿Cómo debe mantenerse la historia consistente? ¿Cuál es la interacción entre el caso descrito anteriormente y la siguiente cita:
No vuelva a marcar las confirmaciones que haya enviado a un repositorio público.
tomado de libro pro git .
Supongo que está relacionado de alguna manera, y si no me encantaría saber por qué. ¿Cuál es la relación entre el escenario anterior y el procedimiento que describí? en este post .
origin/master y master se actualizan, debería rebase origin/b1 en origin/mastery luego hacer git pull cuando b1 ¿Se verifica para extraer el rebase al repositorio local?
git pull y nunca rebasa una rama remota (por ejemplo, origin/master ) en cualquier otra cosa.
origin/b1 y b1 no son lo mismo. Esto es bastante obvio, pero ¿cuál es la forma correcta de solucionarlo? ¿O arreglarlo significa desordenar la historia como se explicó @heavyd?
git stDa esa salida porque Git sabe que tu local.b1rama está siguiendoorigin/b1, así que eso es lo que quieres reajustar. Tu corresgit rebase origin/masterSin embargo, por lo que ha vuelto a basar ("repetido") sub1cometer encima deorigin/master.