আপডেট : গিট ২.২৩ (আগস্ট 2019) এর সাথে একটি নতুন আদেশ রয়েছে
git restoreযা এটি করে, স্বীকৃত উত্তরটি দেখুন ।আপডেট : এটি গিট ১.৮.৩ অনুসারে আরও স্বজ্ঞাতভাবে কাজ করবে, আমার নিজের উত্তর দেখুন ।
নিম্নলিখিত ব্যবহারের ক্ষেত্রেটি কল্পনা করুন: আমি আমার গিট ওয়ার্কিং ট্রিের একটি নির্দিষ্ট সাব-ডিরেক্টরিতে সমস্ত পরিবর্তন থেকে মুক্তি পেতে চাই এবং অন্যান্য সমস্ত সাব-ডিরেক্টরিকে অক্ষত রেখেছি।
আমি করতে পারি
git checkout ., তবে গিট চেকআউট। বিরল চেকআউট দ্বারা বাদ দেওয়া ডিরেক্টরি যুক্ত করেআছে
git reset --hard, কিন্তু এটি আমাকে একটি উপ-ডিরেক্টরিতে এটি করতে দেয় না:> git reset --hard . fatal: Cannot do hard reset with paths.আমি বর্তমান অবস্থাটি ব্যবহার করে বিপরীত-প্যাচ করতে পারি
git diff subdir | patch -p1 -R, তবে এটি এটি করার একটি বরং অদ্ভুত উপায়।
এই অপারেশনের জন্য সঠিক গিট কমান্ড কী?
নীচের স্ক্রিপ্টটি সমস্যার চিত্র তুলে ধরেছে। 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?