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


89

এমন একটি কমান্ড রয়েছে যা আপনাকে ওয়ার্কিং ডিরেক্টরিতে কোনও ফাইল (বা ফাইল) এর পরিবর্তনগুলি আংশিকভাবে পূর্বাবস্থায় ফিরিয়ে আনতে দেয়?

মনে করুন আপনি একটি ফাইল অনেক সম্পাদনা করেছেন তবে আপনি বুঝতে পেরেছেন যে আপনি কিছু পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ অবস্থায় ফিরে যেতে চান তবে অন্যান্য পরিবর্তনগুলি নয়।

আমি এটির git checkoutমতো একটি বিকল্প হিসাবে কল্পনা করছি যা অনেকটা কাজ করে git add -p, যেমন এটি হুঙ্ক দ্বারা ফাইলের মধ্য দিয়ে যায় এবং জিজ্ঞাসা করে যে আপনি এটি রাখতে চান কিনা।

উত্তর:


85

আপনি ব্যবহার করতে পারেন

git add -p <path>

নির্দিষ্ট অংশে আপনি যে ফাইলগুলি রাখতে চান তা পর্যায়ক্রমে

git checkout -- <path>

ফাইলের স্টেজড সংস্করণ পরীক্ষা করে আপনি যে গাছের গাছ রাখতে চান তা বাতিল করতে।

অবশেষে, আপনি ব্যবহার করতে পারেন

git reset -- <path>

আপনার স্টেইজড সংস্করণটি ফাইলের সাম্প্রতিক প্রতিশ্রুতিবদ্ধ সংস্করণে ফিরিয়ে আনতে আপনাকে আপনার পরিবর্তনগুলি অবিচ্ছিন্ন রেখে দিতে।


এই সাধারণ ব্যবহারের ক্ষেত্রে, যা প্রতিটি অন্যান্য সংস্করণ নিয়ন্ত্রণ ব্যবস্থা কেবল "রিভার্ট" বলে ডাকে, গিট কমান্ডটি কেন এত অস্পষ্ট?
জান হেটিচ

4
@ জান কি অন্যান্য সংস্করণ নিয়ন্ত্রণ সিস্টেমের revertকমান্ড আপনাকে ফাইলের মধ্যে কোন পরিবর্তনগুলি পুনরায় উল্টানো হয় তা নির্বাচন করার অনুমতি দেয়? সত্যিই জিজ্ঞাসা করুন, যেমন আমার কেবল সিভিএস এবং গিটের অভিজ্ঞতা আছে। গিট-এ, git checkout -- path/to/fileএকটি একক কমান্ড যা সেই ফাইলের সমস্ত পরিবর্তনকে উল্টে দেয়, তবে এটি উপরের মতো নয়।
মিচিয়াকিগ

4
এছাড়াও আছে git checkout --patchএবং সর্বশেষ গিট git reset --patchমত কাজ যা git add --patch
ম্যাট কনলি

4
@ রুডি, --সাধারণত বিকল্পগুলি পার্সিংয়ের সমাপ্তি নির্দেশ করে এবং এর পরে যে কোনও যুক্তি আক্ষরিক অর্থেই ব্যাখ্যা করা উচিত। এর অর্থ হল যে ./ফাইলনাম পরে এসে যদি আপনাকে কোনও বিয়োগ চিহ্ন দিয়ে শুরু করা কোনও ফাইলনামের আগে যোগ করতে হবে না --
zrajm

আমি যখন git checkout --patchডিফটি ব্যবহার করি তখন পেছনের দিকে উপস্থিত হয়। বিয়োগ চিহ্নগুলি আমার কার্যকরী অনুলিপিটিতে পাঠ্য যুক্ত করছে এবং আরও চিহ্নগুলি আমার কার্যকরী অনুলিপি থেকে লাইনগুলি সরিয়েছে।
ফিলিপ আলভারেজ

115

গিট সংস্করণ সহ> = 1.7.1 আমি পারি

git checkout -p

এই বৈশিষ্ট্যটি কখন চালু হয়েছিল তা আমি নিশ্চিত নই।


11
এটি উল্লেখ করার মতো যে আপনি git reset -pস্টেজিং এরিয়া / সূচী থেকে পরিবর্তনগুলি বেছে বেছে আনস্টেজ করতেও করতে পারেন । গিটের কোন সংস্করণে এটি চালু হয়েছিল তাও আমি আমার মাথার শীর্ষে জানি না।

এটি সঠিক উত্তর, কেন এটি গৃহীত হয়নি।
wukong

4
@ উওকং কারণ এই উত্তরটি প্রশ্নের পরে 2 বছর পরে পোস্ট করা হয়েছে। এই মুহুর্তে (২০০৯) চার্লসের উত্তরটি ছিল সেরা সমাধান
পোমাহ

8

git checkout $fileফাইলটির স্থিতিকে $fileশেষ প্রতিশ্রুতিবদ্ধ অবস্থায় ফিরিয়ে দেয় । আমি মনে করি আপনি git checkout SHA-1 -- $fileফাইলটি SHA-1 দ্বারা চিহ্নিত প্রতিশ্রুতিতে ফেরাতে ব্যবহার করতে পারেন ।


4
হ্যাঁ, আমি যা চাই ঠিক তা নয়, যেহেতু আমি ফাইলটিতে কিছু পরিবর্তন রেখেছি এবং অন্যদের ফিরিয়ে দিতে চাই
1800 তথ্য

1

আপনার কাছে ফিরে যেতে এবং নির্বাচন করতে কয়টি কমিট দরকার? যদি এটি মাত্র একটি হয়, সম্ভবত এর ঠিক আগে একটি শাখা নিন, আপনি যে ফাইলটি প্রতিশ্রুত করেছেন সেটিকে চেকআউট করুন এবং তারপরে git add -pআপনি এটি কীভাবে চান তা যুক্ত করতে ব্যবহার করুন। তারপরে আপনি যেখানে ছিলেন সেখানে ফিরে যেতে পারেন এবং আপনার অস্থায়ী শাখা থেকে ফাইলটি চেকআউট করতে পারেন।

এটাই:

git checkout -b temp troublesome-commit^
git checkout troublesome-commit -- path/to/file
git add -p path/to/file
git commit -c troublesome-commit
git checkout @{-1}
git checkout temp -- path/to/file
git commit path/to/file
git branch -D temp

অন্যান্য বিকল্পগুলির মধ্যে রয়েছে ফিরে যাওয়া এবং সাথে প্রতিশ্রুতি সম্পাদনা করা git rebase -i(কমিট হিসাবে চিহ্নিত করা edit, তারপরে একটি কাজ git reset HEAD^করা এবং শেলের পিছনে ফেলে দেওয়া হলে কমিট পুনরায় করা)।

আপনার যে পরিবর্তনগুলি থেকে বাছাই করা দরকার তা যদি কমিটের একটি সিরিজ জুড়ে ছড়িয়ে পড়ে তবে প্যাচগুলি (বা এই সমস্তটি জুড়ে একটি প্যাচ) হিসাবে বের করে নেওয়া এবং প্যাচটি হাতে সম্পাদনা করে আপনি যে পরিবর্তনগুলি রাখতে চান তা সম্পাদনা করা ভাল, এবং অবশিষ্টাংশ খাওয়ানো git apply --reverse


আমি আসলে প্রতিশ্রুতিবদ্ধ যে কোনও কিছু ফিরিয়ে দিতে চাই না, আমি কেবল আমার কাজের অনুলিপিতে থাকা পরিবর্তনগুলি পূর্বাবস্থায় রাখতে চাই
1800 তথ্য
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.