UPDATE 201 : Git 2.23 (अगस्त 2019) के साथ, एक नया आदेश है
git restore
जो ऐसा करता है, स्वीकृत उत्तर देखें ।अद्यतन : यह Git 1.8.3 के रूप में अधिक सहजता से काम करेगा, मेरा स्वयं का उत्तर देखें ।
निम्नलिखित उपयोग के मामले की कल्पना करें: मैं अपने गिट वर्किंग ट्री के एक विशिष्ट उपनिर्देशिका में सभी परिवर्तनों से छुटकारा पाना चाहता हूं, जिससे अन्य सभी उपनिर्देशिकाएं बरकरार रहें।
मैं कर सकता हूं
git checkout .
, लेकिन गिट चेकआउट। स्पार्स चेकआउट द्वारा शामिल निर्देशिकाओं को जोड़ता हैवहाँ है
git reset --hard
, लेकिन यह मुझे एक उपनिर्देशिका के लिए ऐसा नहीं करने देगा:> git reset --hard . fatal: Cannot do hard reset with paths.
फिर से: git पथ द्वारा कठिन / नरम रीसेट क्यों नहीं कर सकता है?
मैं वर्तमान स्थिति का उपयोग करते हुए रिवर्स-पैच कर सकता हूं
git diff subdir | patch -p1 -R
, लेकिन यह ऐसा करने का एक अजीब तरीका है।
इस ऑपरेशन के लिए उचित Git कमांड क्या है?
नीचे दी गई स्क्रिप्ट समस्या का चित्रण करती है। How to make files
टिप्पणी के नीचे उचित कमांड डालें - वर्तमान कमांड उस फ़ाइल को पुनर्स्थापित करेगा a/c/ac
जिसे विरल चेकआउट द्वारा बाहर रखा जाना है। ध्यान दें कि मैं स्पष्ट रूप से बहाल नहीं करना चाहता हूं a/a
और a/b
, मैं केवल "जानता हूं" a
और नीचे की सभी चीजों को पुनर्स्थापित करना चाहता हूं। संपादित करें : और मैं भी "नहीं जानता" b
, या जो अन्य निर्देशिका के समान स्तर पर रहते हैं 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
पथ तर्क स्वीकार नहीं करता ...
git stash && git stash drop
?