আপডেট : গিট ২.২৩ (আগস্ট 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
?