GÜNCELLEME² : Git 2.23 (Ağustos 2019) ile
git restorebunu yapan yeni bir komut var, kabul edilen cevaba bakın .GÜNCELLEME : Bu Git 1.8.3'ten itibaren daha sezgisel olarak çalışacaktır, kendi cevabımı görün .
Aşağıdaki kullanım durumunu düşünün: Git çalışma ağacımın belirli bir alt dizinindeki tüm değişikliklerden kurtulmak ve diğer tüm alt dizinleri olduğu gibi bırakmak istiyorum.
Yapabilirim
git checkout ., ama git checkout. seyrek ödeme tarafından hariç tutulan dizinleri eklerVar
git reset --hard, ama bir alt dizin için yapmama izin vermiyor:> git reset --hard . fatal: Cannot do hard reset with paths.Mevcut durumu kullanarak ters yama yapabilirim
git diff subdir | patch -p1 -R, ancak bunu yapmanın oldukça garip bir yolu var.
Bu işlem için uygun Git komutu nedir?
Aşağıdaki komut dosyası sorunu göstermektedir. How to make filesYorumun altına uygun komutu ekleyin - geçerli komut a/c/ac, seyrek ödeme tarafından hariç tutulması gereken dosyayı geri yükler . O Not yok açıkça geri yüklemek istediğiniz a/ave a/bben sadece "bilmek" ave aşağıdaki her şeyi geri istiyorum. EDIT : Ve ben de "bilmiyorum" b, ya da diğer dizinlerin aynı düzeyde bulunduğu 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 stashbir yol argümanı kabul etmiyor ...
git stash && git stash drop?