GÜNCELLEME² : Git 2.23 (Ağustos 2019) ile
git restore
bunu 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 files
Yorumun 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/a
ve a/b
ben sadece "bilmek" a
ve 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 stash
bir yol argümanı kabul etmiyor ...
git stash && git stash drop
?