গিটে মুছে ফেলা ফাইলটি আনস্টেজ করুন


504

সাধারণত, আপনি যে কোনও ফাইলের পরিবর্তনগুলি বাতিল করবেন:

git checkout -- <file>

আমি যদি পরিবর্তনটি বাতিল করতে চাই তবে ফাইলটি মোছা হচ্ছে? উপরের লাইনটি একটি ত্রুটি দেয়:

error: pathspec '<file>' did not match any file(s) known to git.

কোন পরিবর্তন অন্যান্য পরিবর্তনগুলি পূর্বাবস্থায় না রেখে সেই একক ফাইলটিকে পুনরুদ্ধার করবে?

বোনাস পয়েন্ট: এছাড়াও, যদি আমি পরিবর্তনটি বাতিল করতে চাই তবে একটি ফাইল যুক্ত করা হয়? আমি কীভাবে সেই পরিবর্তনটি আনস্টেজ করতে পারি তা জানতে চাই।


1
পরিবর্তনগুলি বাতিল করা এবং আনস্টেজ করা দুটি পৃথক জিনিস, আপনি কী করার চেষ্টা করছেন?
অ্যান্ড্রু মার্শাল

1
এটি একটি পোস্টে দুটি ভিন্ন প্রশ্ন এবং সমস্যা। এটি উত্তরগুলি খুব বেশি এবং অযথা বিভ্রান্ত করে তোলে।
ডেভিড সোপকো

উত্তর:


778

ধরে নেওয়া যাক আপনি প্রভাবগুলো দূর অনুপস্থিত করছি git rm <file>বা rm <file>দ্বারা অনুসরণ git add -Aবা অনুরূপ কিছু:

# this restores the file status in the index
git reset -- <file>
# then check out a copy from the index
git checkout -- <file>

পূর্বাবস্থায় ফেরাতে git add <file>, ধরে নিই যে আপনি এখনও প্রতিশ্রুতিবদ্ধ নন above


69
--চাবিকাঠি। git reset <file>কাজ করে না, যা আমাকে এখানে এনেছে।

তবে এটি সমস্ত পরিবর্তনও পুনরুদ্ধার করবে। আমি কেবল সমস্ত মুছে ফেলা ফাইলগুলি পুনরুদ্ধার করতে চাইলে কী করতে হবে। এবং সমস্ত পরিবর্তন অচেনা রাখুন।
ডেইনিয়াস ক্রেইভিস

2
কেন কেবল end-of-options-markerমুছে ফেলা ফাইলের ক্ষেত্রে প্রয়োজনীয়?
হরিদসভ

4
@ হ্যান্ডসভ এটি কঠোরভাবে প্রয়োজন হয় না (আপনি পর্যায়ক্রমে এটি করতে পারেন git reset HEAD <file>, যা সমতুল্য), তবে git resetএটির প্রথম যুক্তিটি end-of-options-markerকোনও ফাইলের নাম নয়, রেফের নাম হিসাবে বিবেচনা করে । এটি কি আরও নমনীয়ভাবে লেখা যেতে পারে? সম্ভবত। কেন হয় নি? সম্ভবত কেবল বিকাশকারীরা অবশ্যই এটি জানেন।
twalberg

2
@ টিওয়ালবার্গ git reset filenameমুছে ফেলা না হওয়া ফাইলগুলির জন্য দুর্দান্ত কাজ করে।
ব্রায়ান গর্ডন

56

উভয় প্রশ্নের উত্তর দেওয়া হয় git status

একটি নতুন ফাইল ব্যবহার যুক্ত করতে স্টেস্টেজ করতে git rm --cached filename.ext

# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   test

একটি ফাইল ব্যবহার মুছে ফেলা আনস্টেজ করতে git reset HEAD filename.ext

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    test

অন্যদিকে, git checkout --কখনও আনস্টেজ নয়, এটি কেবল অ-পর্যায়িত পরিবর্তনগুলি বাতিল করে।


5
আমি দেবিয়ানে 1.7.2.5 গিটে মুছে ফেলা ফাইলটির জন্য ইঙ্গিতটি দেখতে পাচ্ছি না।
ট্রিপলি

git statusউদ্ধৃত দেখে ভাল লাগল; ব্যবহারকারীদের এখন এবং পরের বার স্ব-সহায়তার একটি উপায় দেখায় এবং ভবিষ্যতে গিট সংস্করণে তথ্য যুক্ত বা আপডেট হওয়ার ক্ষেত্রে।
কেইন

এটা ভুল. "পরিবর্তনগুলি অঙ্গীকারবদ্ধ হতে" তুমি কি দেখতে হয় আগেgit resetপরেgit reset , আপনি "পরিবর্তিত কিন্তু আপডেট করা" দেখতে যার মানে "পরিবর্তনসমূহ মঞ্চস্থ নয়" Git লেখক স্থানীয় ভাষায়, দৃশ্যত। আরও গুরুত্বপূর্ণ বিষয়, "গিট স্ট্যাটাস আপনাকে যা জানলে সবই আপনাকে বলে দেয়" সম্পর্কে পুরো গোপনীয়তা মিথ্যা। (পরিচালকদের যারা বলে যে মানুষের সময় নষ্ট করছে এবং তাদের বরখাস্ত করা উচিত।)
ব্যক্তিগত_ক্লাউড

11

আপনার দুটি প্রশ্নের উত্তর সম্পর্কিত। আমি দ্বিতীয়টি দিয়ে শুরু করব:

একবার আপনি কোনও ফাইল মঞ্চস্থ করে নিলে (প্রায়শই git addঅন্যান্য কমান্ডগুলি স্পষ্টতই পরিবর্তনগুলি মঞ্চস্থ করে তোলে, যেমন git rm) আপনি সেই পরিবর্তনটি ব্যাকআপ করতে পারেন git reset -- <file>

আপনার ক্ষেত্রে অবশ্যই git rmফাইলটি অপসারণ করতে হবে, যা কেবল এটির সাথে সরানো rmএবং তারপরে পরিবর্তনটি মঞ্চস্থ করার সমতুল্য । আপনি যদি প্রথমে এটি আনস্টেজ করে থাকেন git reset -- <file>তবে তার সাথে এটি পুনরুদ্ধার করতে পারেন git checkout -- <file>


7

যদি এটি মঞ্চায়িত হয় এবং প্রতিশ্রুতিবদ্ধ হয় তবে নিম্নলিখিতগুলি ফাইলটি পুনরায় সেট করবে:

git reset COMMIT_HASH file_path
git checkout COMMIT_HASH file_path
git add file_path

এটি এমন একটি মুছে ফেলার জন্য কাজ করবে যা পূর্বে বেশ কয়েকটি প্রতিশ্রুতি ঘটেছিল।


1
এটি আরও দক্ষgit revert COMMIT_HASH
ফ্লায়ার

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.