tipos - ''git add--patch'' para incluir nuevos archivos?
tipos de etiquetas en git (4)
Cuando ejecuto git add -p
, ¿hay alguna forma para que git seleccione archivos recién creados como huntidos para seleccionar?
Entonces, si hago un nuevo archivo llamado foo.java
, luego ejecuto git add -p, git no me permitirá elegir el contenido de ese archivo para agregarlo al índice.
Cuando probé git add -p someNewFile.txt
en un archivo nuevo (un archivo sin seguimiento), git simplemente generará No changes.
y pare. Tuve que decirle a Git que tenía la intención de rastrear el nuevo archivo primero.
git add -N someNewFile.txt
git add -p
Sin embargo, dado que el archivo no fue rastreado, se mostraría como un trozo gigante que no se podría dividir (¡porque es todo nuevo!). Entonces, necesitaba editar el trozo en bits más pequeños. Si no está familiarizado con eso, revise esta referencia para comenzar.
Actualización: la información de edición de Hunk quería actualizar esto en caso de que desaparezca la referencia anterior. Debido a que el nuevo archivo no está rastreado, git add -p
mostrará cada línea en el archivo como una nueva línea en un solo fragmento. Luego le preguntará qué quiere hacer con ese trozo, dándole el siguiente mensaje:
Stage this hunk [y,n,q,a,d,/,e,?]?
Suponiendo que no desea cometer todo el fragmento (y, por lo tanto, todo el archivo; porque no estoy seguro de por qué querría usar git add -p
en ese caso?), Deseará especificar la opción e
para decirle a git que quieres editar el trozo.
Una vez que le diga a git que desea editar el fragmento, debería dejarlo en el editor de su elección para que pueda realizar los cambios. Todas las líneas deben tener un prefijo con un +
y git tiene algunos comentarios explicativos (prefijados con un #
) al final del archivo. Simplemente elimine las líneas que no desee en su confirmación inicial del archivo. Luego guarde y salga del editor.
La explicación de Git de las opciones de hunk de git:
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
Para hacer esto con cada nuevo archivo, puede ejecutar:
git add -N .
git add -p
Si desea usarlo con frecuencia, puede crear un alias en su ~/.bashrc
:
alias gapan=''git add --intent-to-add . && git add --patch''
NB : si usa esto con un archivo nuevo vacío, git no podrá parchearlo y saltar al siguiente.
También hay un enfoque muy similar que utiliza la bandera --cached
...
1) Convierta sus cambios sin etapas en etapas, al igual que su archivo agregado.
git add edited-file.txt
git add new-file.txt
git add directory-of-changes/
2) Observe la diferencia (nota: puede incluir ediciones y archivos nuevos).
git diff --cached
3) Crea el parche.
git diff --cached > my_patch_file.patch
git add -p
es realmente acerca de agregar cambios a archivos ya rastreados.
El comando para seleccionar interactivamente archivos para agregar es git add -i
. Por ejemplo:
$ git add -i
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> a
1: another-new.java
2: new.java
Add untracked>> 2
1: another-new.java
* 2: new.java
Add untracked>>
added one path
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> q
Bye.
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: new.java
Untracked files:
(use "git add <file>..." to include in what will be committed)
another-new.java
(El comando real tiene colores que no pude cortar y pegar aquí, así que es más bonito de lo que parece)
En realidad, el comando p atch de git add -i
hace lo mismo que git add -p
, por lo que el segundo es un subconjunto del primero (aunque admito que me encanta add -p
y odio add -i
yo mismo).