AGGIORNAMENTO² : Con Git 2.23 (agosto 2019), c'è un nuovo comando
git restore
che fa questo, vedi la risposta accettata .AGGIORNAMENTO : Funzionerà in modo più intuitivo a partire da Git 1.8.3, vedi la mia risposta .
Immagina il seguente caso d'uso: voglio sbarazzarmi di tutte le modifiche in una specifica sottodirectory del mio albero di lavoro Git, lasciando intatte tutte le altre sottodirectory.
Posso fare
git checkout .
, ma git checkout. aggiunge le directory escluse dal checkout sparseSì
git reset --hard
, ma non mi permette di farlo per una sottodirectory:> git reset --hard . fatal: Cannot do hard reset with paths.
Ancora: perché git non è in grado di eseguire reimpostazioni hard / soft per percorso?
Posso applicare una patch inversa allo stato corrente usando
git diff subdir | patch -p1 -R
, ma questo è un modo piuttosto strano di farlo.
Qual è il comando Git corretto per questa operazione?
Lo script seguente illustra il problema. Inserisci il comando corretto sotto il How to make files
commento: il comando corrente ripristinerà il file a/c/ac
che dovrebbe essere escluso dal checkout sparse. Nota che non voglio ripristinare esplicitamente a/a
e a/b
, solo "so" a
e voglio ripristinare tutto ciò che segue. EDIT : E anche io non "sapere" b
, o quali altre directory risiedono allo stesso livello di a
.
#!/bin/sh
rm -rf repo; git init repo; cd repo
for f in a b; do
for g in a b c; do
mkdir -p $f/$g
touch $f/$g/$f$g
git add $f/$g
git commit -m "added $f/$g"
done
done
git config core.sparsecheckout true
echo a/a > .git/info/sparse-checkout
echo a/b >> .git/info/sparse-checkout
echo b/a >> .git/info/sparse-checkout
git read-tree -m -u HEAD
echo "After read-tree:"
find * -type f
rm a/a/aa
rm a/b/ab
echo >> b/a/ba
echo "After modifying:"
find * -type f
git status
# How to make files a/* reappear without changing b and without recreating a/c?
git checkout -- a
echo "After checkout:"
git status
find * -type f
git checkout -- /path/to/subdir/
?
git stash
non accetta un argomento sul percorso ...
git stash && git stash drop
?