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 la otra 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 para hacer esto?
git
git-branch
branching-and-merging
madlep
fuente
fuente
Respuestas:
Ejecute esto desde la rama donde desea que termine el archivo:
Fórmulas generales:
Algunas notas (de comentarios):
myfile.txt
ymydir
una alternativa:
fuente
''
para que el shell no los interprete.Terminé en 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 :
fuente
git diff <other branch> <path to file>
funciona bien.¿Qué pasa con el uso del comando de pago:
fuente
git diff
admite un--stat
argumento que básicamente hace lo mismo que diffstat.1) Asegúrese de estar en la sucursal donde necesita una copia del archivo. por ejemplo: quiero un archivo de sucursal secundaria en maestro, por lo que debe pagar o debe estar en maestro
git checkout master
2) Ahora compruebe solo el archivo específico que desee de la subrama en maestro,
aquí
sub_branch
significa dónde tiene ese archivo seguido del nombre de archivo que necesita copiar.fuente
Siguiendo la respuesta de madlep, también puede copiar un directorio de otra rama con el blob de directorio.
En cuanto a la pregunta del operador si solo ha cambiado un archivo allí, funcionará bien ^ _ ^
fuente
origin/other-branch
para referirse a la rama de repositorio. Lo básico, pero me mordió. (la respuesta es excelente, no requiere edición)Yo usaría
git restore
(disponible desde git 2.23)git restore --source otherbranch path/to/myfile.txt
¿Por qué es mejor que otras opciones?
git checkout otherbranch -- path/to/myfile.txt
- Copia el archivo en el directorio de trabajo pero también en el área de ensayo (efecto similar al de copiar este archivo manualmente y ejecutarlogit add
en él).git restore
no toca el área de preparación (a menos que se lo indique por--staged
opción).git show otherbranch:path/to/myfile.txt > path/to/myfile.txt
usa redirección de shell estándar. Si usa Powershell, entonces podría haber un problema con la búsqueda de texto o podría obtener un archivo roto si es binario . Con elgit restore
cambio de archivos se hace todo porgit
ejecutable.Otra ventaja es que puede restaurar la carpeta completa con:
git restore --source otherbranch path/to
o con
git restore --overlay --source otherbranch path/to
si desea evitar eliminar archivos. Por ejemplo, si hay menos archivos en elotherbranch
directorio de trabajo actual (y estos archivos se rastrean ) sin--overlay
opcióngit restore
, los eliminará. Pero este es un buen comportamiento predeterminado, lo más probable es que desee que el estado del directorio sea el mismootherbranch
, no "el mismo pero con archivos adicionales en mi rama actual"fuente
git restore
manera de copiar un archivo de la rama de origen a un nuevo archivo en la rama de destino? Con git show puedo hacer esto con la redirección de shell (git show otherbranch:path/to/file1.txt > path/to/file2.txt
), pero quiero evitar la redirección de shell por las razones que mencionaste.git restore
(pero quién sabe;)). Estos problemas de redirección son básicamente un problema de Powershell, no estoy seguro si hay algún otro shell que tenga problemas con él. Por lo general, vuelvo a "git bash" o incluso "cmd" donde necesito usargit show
comandos " con redirección". O use la GUI como GitExtensions donde puede explorar el árbol de archivos de commit y hacer clic en "Guardar como" en cualquier archivo.Tenga en cuenta que en la respuesta aceptada, la primera opción muestra todo el archivo desde la otra rama (como
git add ...
se había realizado), y que la segunda opción tiene en cuanto a copiar el archivo, pero no organizar los cambios (como si tuviera solo edité el archivo manualmente y tenía diferencias notables).Git copia el archivo de otra rama sin organizarlo
Cambios organizados (por ejemplo
git add filename)
:Cambios pendientes (no escenificados o comprometidos):
fuente