I que tiene una confusión acerca de un comportamiento git en particular:git renombrar/eliminar la confusión
A continuación se presentan los pasos y situación (la lista de comandos también se dan más adelante):
- Tengo dos ramas: master y XBranch
- Hay un archivo src/a.txt en ambos. Su contenido es "Contenido anterior"
- En XBranch cambio el nombre de src/a.txt a src/b.txt, usando:
mv
,git rm
,git add
. En el principal, cambie el nombre del archivo a.txt. Durante cometer hice
git rm src/a.txt
, pero se olvidó de hacergit add src/b.txt
En maestra que hago:git rm src/a.txt
ygit commit
en el maestro, puedo editar el contenido del archivo a b.txt "
New Content
- En maestra que hago y
git add src/b.txt
git commit
- En maestra que hago:
git merge XBranch
el archivo conflictos src/B.txt, lo cual es perfectamente ONU comprensible Pero el contenido es "Old Content
". ¿Por qué?
Por qué no es algo así como:
<<<<<<< HEAD
New Content
=======
Old content
>>>>>>> XBranch
Lista de comandos:
[email protected] d:/merge_temp/test/case2
$ mkdir source
[email protected] d:/merge_temp/test/case2
$ git init
Initialized empty Git repository in d:/merge_temp/test/case2/.git/
[email protected] d:/merge_temp/test/case2 (master)
$ mkdir src
[email protected] d:/merge_temp/test/case2 (master)
$ vi src/a.txt
[email protected] d:/merge_temp/test/case2 (master)
$ cat src/a.txt
Old Content
[email protected] d:/merge_temp/test/case2 (master)
$ git add src/
[email protected] d:/merge_temp/test/case2 (master)
$ git commit
[master (root-commit) 148500e] added src/a.txt
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 src/a.txt
[email protected] d:/merge_temp/test/case2 (master)
$ git branch XBranch
[email protected] d:/merge_temp/test/case2 (master)
$ git checkout XBranch
Switched to branch 'XBranch'
[email protected] d:/merge_temp/test/case2 (XBranch)
$ mv src/a.txt src/b.txt
[email protected] d:/merge_temp/test/case2 (XBranch)
$ git rm src/a.txt
rm 'src/a.txt'
[email protected] d:/merge_temp/test/case2 (XBranch)
$ git add src/b.txt
[email protected] d:/merge_temp/test/case2 (XBranch)
$ git commit
[XBranch b3ff8fa] changed a.txt to b.txt in XBranch
1 files changed, 0 insertions(+), 0 deletions(-)
rename src/{a.txt => b.txt} (100%)
[email protected] d:/merge_temp/test/case2 (XBranch)
$ git checkout master
Switched to branch 'master'
[email protected] d:/merge_temp/test/case2 (master)
$ mv src/a.txt src/b.txt
[email protected] d:/merge_temp/test/case2 (master)
$ git rm src/a.txt
rm 'src/a.txt'
[email protected] d:/merge_temp/test/case2 (master)
$ git commit
[master bfeaecb] removed src/a.txt
1 files changed, 0 insertions(+), 1 deletions(-)
delete mode 100644 src/a.txt
[email protected] d:/merge_temp/test/case2 (master)
$ vi src/b.txt
[email protected] d:/merge_temp/test/case2 (master)
$ cat src/b.txt
New Content
[email protected] d:/merge_temp/test/case2 (master)
$ git add src/b.txt
[email protected] d:/merge_temp/test/case2 (master)
$ git commit
[master 2361d5e] changed content of b.txt
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 src/b.txt
[email protected] d:/merge_temp/test/case2 (master)
$ git merge XBranch
CONFLICT (rename/delete): Rename src/a.txt->src/b.txt in XBranch and deleted in HEAD
Automatic merge failed; fix conflicts and then commit the result.
[email protected] d:/merge_temp/test/case2 (master|MERGING)
$ cat src/b.txt
Old Content
Pero entonces, ¿cómo lógicamente se diferencia de la siguiente situación : 1. Agrego un archivo a.txt en el maestro con "Contenido antiguo" y lo confirmo. 2. Agrego un archivo a.txt en XBranch con "Nuevo contenido" y lo confirmo. 3. Combino XBranch en el maestro. ¡Esta vez muestra ambos contenidos en ese archivo! – Sabya
@Sabya: esta vez, ambos árboles (el directorio 'case2' en las ramas' master' y 'XBranch') hacen referencia a un * nuevo * archivo' a.txt': su contenido se fusiona, con resolución de conflictos. Antes, había un conflicto entre ** ** a.txt' ** (renombrado como 'b.txt') y un nuevo **' b.txt' **: ambos archivos no podían existir en la misma rama, una elección (de archivo, no de contenido de archivo) tuvo que hacerse. – VonC
En el paso 4 de mi pregunta, si hago "git rm" y "git add" en una sola confirmación, ¡funciona como espero! No entiendo eso ahora. ¿Cómo puedo predecir cuándo el archivo tendrá ambos contenidos? ¿Cuándo solo tendrá el contenido de XBranch y cuándo tendrá el contenido de master? – Sabya