Pregunta

Tengo dos ramas que están completamente fusionadas.

Sin embargo, después de que se realiza la fusión, me doy cuenta de que un archivo ha sido desordenado por la fusión (alguien más hizo un formateo automático, gah), y sería más fácil cambiar a la nueva versión en el otro rama, y ??luego vuelva a insertar mi cambio de una línea después de traerlo a mi rama.

Entonces, ¿cuál es la forma más fácil en git de hacer esto?

¿Fue útil?

Solución

Ejecute esto desde la rama donde desea que termine el archivo:

git checkout otherbranch myfile.txt

Fórmulas generales:

git checkout <commit_hash> <relative_path_to_file_or_dir>
git checkout <remote_name>/<branch_name> <file_or_dir>

Algunas notas (de los comentarios):

  • Usando el hash commit puede extraer archivos de cualquier commit
  • Esto funciona para archivos y directorios
  • sobrescribe el archivo myfile.txt y mydir
  • Los comodines no funcionan, pero las rutas relativas sí
  • Se pueden especificar múltiples rutas

una alternativa:

git show commit_id:path/to/file > path/to/file

Otros consejos

Terminé con esta pregunta en una búsqueda similar. En mi caso, estaba buscando extraer un archivo de otra rama en el directorio de trabajo actual que era diferente de la ubicación original del archivo. Respuesta :

git show TREEISH:path/to/file >path/to/local/file

¿Qué pasa con el uso del comando de pago?

  git diff --stat "$branch"
  git checkout --merge "$branch" "$file"
  git diff --stat "$branch"

Siguiendo la respuesta de madlep, también puede copiar un directorio de otra rama con el blob de directorio.

git checkout other-branch app/**

En cuanto a la pregunta del operador si solo ha cambiado un archivo allí, funcionará bien ^ _ ^

1) Asegúrese de estar en la sucursal donde necesita una copia del archivo. por ejemplo: quiero un archivo de sucursal secundaria en el maestro, por lo que debe pagar o debe estar en el maestro git checkout master

2) Ahora verifique solo el archivo específico que desee de la subrama en maestro,

git checkout sub_branch file_path/my_file.ext

aquí sub_branch significa dónde tiene ese archivo seguido del nombre de archivo que necesita copiar.

Tenga en cuenta que en la respuesta aceptada, la primera opción coloca todo el archivo de la otra rama (como git add ... ) y que la segunda opción solo da como resultado la copia del archivo, pero no organiza los cambios (como si acabara de editar el archivo manualmente y tuviera diferencias notables).

Git copia el archivo de otra rama sin organizarlo

Cambios organizados (por ejemplo, git add filename) :

$ git checkout directory/somefile.php feature-B

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   directory/somefile.php

Cambios pendientes (no efectuados o confirmados):

$ git show feature-B:directory/somefile.php > directory/somefile.php

$ git status
On branch feature-A
Your branch is up-to-date with 'origin/feature-A'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   directory/somefile.php

no changes added to commit (use "git add" and/or "git commit -a")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top