গিট নির্বাচনী ফাইল থেকে স্থানীয় পরিবর্তনগুলি ফিরিয়ে দিন vert


149

আমার গিট রেপো যা একটি এসএনএন রেপো ট্র্যাক করছে আমি একটি ফাইলে বেশ কয়েকটি সম্পাদনা করেছি।

এখন আমি এই পরিবর্তনগুলি (যেমন এসএনএন রিভার্ট) ফিরিয়ে দিতে চাই, তবে কেবলমাত্র ফাইলের কিছু অংশ।

আমি ফাইলটিতে ভিন্নতা দেখতে সক্ষম হতে চাই, যে পরিবর্তনগুলি আমি চাই না তা বাতিল করে (প্রত্যাবর্তন) করতে চাই এবং আমার যে পরিবর্তনগুলি চায় তা ধরে রাখতে পারি।

দ্য

git add -i 

কমান্ডের এটি করার একটি বিকল্প আছে বলে মনে হচ্ছে তবে আমি এটি এখনও স্টেজ করতে চাই না।

উত্তর:


91

আপনি সরাসরি সঙ্গে এটি করতে পারেন git checkout -p। দেখুন ড্যানিয়েল Stutzbach এর উত্তর নিচে।


পুরানো উত্তর (আগে checkout -pপরিচয় করিয়ে দেওয়া হয়েছিল):

আপনি এটি এর মতো করতে পারেন:

git add -i

(আপনি রাখতে চান এমন কুকুরগুলি নির্বাচন করুন)

git commit -m "tmp"

আপনি কেবল যে পরিবর্তনগুলি রাখতে চান তা নিয়ে এখন আপনার প্রতিশ্রুতি রয়েছে এবং বাকীটি অবিরত।

git reset --hard HEAD

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

git reset --mixed HEAD^

এটি শেষ প্রতিশ্রুতি ('tmp') সরিয়ে দেয়, তবে আপনার ওয়ার্কিং ডিরেক্টরিতে পরিবর্তনগুলি অস্টেজ করে রাখে।

সম্পাদনা: মঞ্চ অঞ্চলটি পরিষ্কার করার জন্য, এর --softসাথে প্রতিস্থাপন --mixedকরা হয়েছে।


আমি যে পরিবর্তনগুলি রাখতে চাই তা প্রতিশ্রুতিবদ্ধ? আমি এখনও এই পরিবর্তনগুলি করতে চাই না। মিমি সম্ভবত আমি কমিটিকে খুব গুরুত্বের সাথে নিচ্ছি। এটি এখন স্থানীয় রিপোতে থাকায় আমার এখন শিথিল হওয়া উচিত। বিটিডব্লিউ গিট রিসেট করে কি করে - সোফট হেড ^ কি করে?
প্রদীপ

"গিট রিসেট --সোফট হেড ^" এই অর্থে একটি প্রতিশ্রুতি বাতিল করে যে এটি কাজ করে ডিরেক্টরি এবং সূচককে যেমন রাখে তেমনি বর্তমান শাখাটিকে একটি প্রতিশ্রুতি ফিরিয়ে দেয়।
জাকুব নরবস্কি

ধন্যবাদ জাকুব। পাওলো কেন মাথা নরম পুনরায় সেট করতে হবে - 1 এখানে প্রয়োজন? আংশিক প্রতিশ্রুতিবদ্ধ এবং হার্ড রিসেটটি যথেষ্ট হওয়া উচিত কিছু পরিবর্তন রাখা এবং অন্যকে ত্যাগ করা?
প্রদীপ

1
নীচে ড্যানিয়েলের উত্তরটি অনেক সহজ এবং এটি করার সঠিক উপায় বলে মনে হচ্ছে।
উমং

309

আমি বিশ্বাস করি আপনি এটি খুব সহজেই এর মাধ্যমে করতে পারবেন:

git checkout -p <optional filename(s)>

ম্যানপেজ থেকে:

   −p, −−patch
       Interactively select hunks in the difference between the <tree−ish>
       (or the index, if unspecified) and the working tree. The chosen
       hunks are then applied in reverse to the working tree (and if a
       <tree−ish> was specified, the index).
       This means that you can use git checkout −p to selectively discard
       edits from your current working tree.

1
এছাড়াও, আপনি যদি এটি নির্বাচন করে না করতে চান, আপনি পরিবর্তনগুলি বাতিল করতে "গিট চেকআউট - <ফাইল> ..." ব্যবহার করতে পারেন।
db42

এটি ডিরেক্টরি সঙ্গে ডিল করে?
ববম

1
পরিবর্তনগুলি বর্জন করার সময় এটি আমার পক্ষে অনেকটা ব্যর্থ বলে মনে হচ্ছে ("ত্রুটি: প্যাচ ব্যর্থ <ফাইল>", "ত্রুটি: <ফাইল> প্যাচ প্রযোজ্য নয়")। আশ্চর্যজনকভাবে যথেষ্ট যে আমি aসম্পূর্ণ ফাইলটি ফেলে দেওয়ার জন্য প্যাচ মোডে বিকল্পটি ব্যবহার করার সময় সেই ত্রুটিগুলি পেয়ে যাব , তবে git checkout -- <file>প্রত্যাশার মতো কাজ করে। কেউ জানেন কেন?
chrnola

ফাইলটি ইতিমধ্যে প্যাচ করা থাকলে আমার কয়েকবার ত্রুটি হয়েছিল এবং সুতরাং ইন্টারেক্টিভ প্যাচটি বর্তমান ফাইলটির প্রয়োগিত প্যাচগুলির সাথে পুরানো। উত্স গাছের মতো একটি গুই সরঞ্জাম ব্যবহার করার সময় আমি ঘটনাক্রমে দু'বার বাদ দিলে এটি ঘটেছিল। দ্বিতীয় বার যে ত্রুটি উত্পাদন করে।
ফায়াত

3

আপনি git diffফাইলটিতে চালাতে পারেন , ফলস্বরূপ পৃথকটি সংরক্ষণ করতে পারেন, আপনি যে পরিবর্তনগুলি সংরক্ষণ করতে চান তা মুছে ফেলার জন্য এটি সম্পাদনা করতে পারেন , তারপরে এটি চালানpatch -R বাকী পূর্বাবস্থায় ফিরিয়ে আনুন।

git diff file.txt> patch.tmp
আপনি রাখতে চান এমন কুকুরটিকে সরাতে # প্যাচ.টিএমপি সম্পাদনা করুন
প্যাচ -আর <patch.tmp

আমার প্যাচ ফাইলে আমার 2 টি শিকার ছিল এবং একটি মুছে ফেলেছি। কারণ কী তা নিশ্চিত নন তবে প্যাচ-আর এটি দিয়ে প্রত্যাখ্যান করে চলেছে।
প্রদীপ

2
আপনি অন্য একটি মন্তব্যে উল্লেখ করেছেন যা git diffপুরো ফাইলটি পরিবর্তিত হিসাবে দেখায়। এটি সাধারণত ঘটে যখন আপনি ফাইলটি আগের লাইনের থেকে আলাদা লাইন এন্ডিং ব্যবহার করে সংরক্ষণ করেছেন। এটি patchপ্যাচ ফাইলটি প্রত্যাখ্যান করতে পারে। যে শব্দ কি ঘটতে পারে মত লাগছে?
গ্রেগ হিউগিল

তুমি ঠিক. আমি যখনই প্যাচ কমান্ডটি ব্যবহার করি তখন লাইন শেষগুলি টগল হয়ে যায়। আমি উইন্ডোতে আছি এবং ক্রিম / ভিএম ব্যবহার করছি। আমার মনে হয় এটি প্রথমে বাছাই করা দরকার।
প্রদীপ

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

3

দেখে মনে হচ্ছে আপনি চাইছেন

 git revert --no-commit $REVSISON 

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

 git diff --cached

কমিট করার আগে কী পরিবর্তন করা হবে তা দেখতে (যেমন প্রত্যাবর্তন পূর্ববর্তী দিকের একটি প্রতিশ্রুতি যা অতীতের পরিবর্তনের বিপরীত চিত্রকে প্রতিস্থাপন করে)

আপনি যদি খাঁটি গিট সংগ্রহস্থলের সাথে থাকেন তবে আপনি সম্ভবত আপনার লক্ষ্যগুলির উপর নির্ভর করে ইন্টারেক্টিভ রিবেস ( git rebase -i) ব্যবহার করতে পারেন যাতে আপনি যে প্রতিশ্রুতি পছন্দ করেন না সেটিতে ফিরে যেতে পারেন এবং প্রতিশ্রুতিটি পূর্ববর্তীভাবে সম্পাদনা করতে পারেন যাতে আপনি যে পরিবর্তনগুলি চান তা কখনই ঘটে না happened , তবে সাধারণত যদি আপনি জানেন তবে আপনি এটি আর কখনও দেখতে চাইবেন না ts


আপনি পূর্ববর্তী পুনর্বিবেচনায় উল্লেখ করার সাথে সাথে আমি প্রত্যাবর্তন করেছি (এটি কি সঠিক?) এবং এখন গিট ডিফ পুরো পরিবর্তিত হিসাবে পুরো ফাইলটি দেখায়। আমি যে সম্পাদনাগুলি করেছি তা দেখানোর কথা?
প্রদীপ

1

প্রশ্নটি পুনরায় পড়া, মনে হচ্ছে আপনি আপনার কার্যনির্বাহী গাছের মধ্যে থাকা পরিবর্তনগুলি ফিরিয়ে নিতে চান এবং পূর্বে করা প্রতিশ্রুতিগুলি পরিবর্তন করেননি তবে অন্য উত্তরগুলির মধ্যে এমন কিছু মনে হয়েছে যা আমার পড়া ভুল হতে পারে। আপনি কি স্পষ্ট করতে পারেন?

যদি পরিবর্তনগুলি কেবল আপনার কার্যকরী অনুলিপিতে থাকে তবে এটির সবচেয়ে সহজ উপায় হ'ল যে পরিবর্তনগুলি আপনি ধরে রাখতে চান তা পর্যায়ক্রমে করা:

git add -i <file>

তারপরে আপনি যে পরিবর্তনগুলি রাখতে চান না তা সূচক সংস্করণটি পরীক্ষা করে ফেলে দিন:

git checkout -- <file>

তারপরে পরিবর্তনগুলি পর্যায়ক্রমে স্টেজ করুন যদি আপনি না চান তবে:

git reset -- <file>

এই রেসিপিটি কেবলমাত্র ফাইলগুলিতে বা আপনার নির্বাচিত পরিবর্তনগুলি (বা আপনার নির্দিষ্ট করা ফাইলগুলি) পরিবর্তিত করে এবং এমন কোনও অস্থায়ী প্রতিশ্রুতি তৈরি করে না যা তারপরে ফিরে যাওয়ার প্রয়োজন।

আপনি যদি পূর্ববর্তী কমিটগুলিতে করা কিছু পরিবর্তনকে বেছে বেছে প্রয়োগ করতে চান তবে আপনি প্রথমে কোনও পূর্ববর্তী প্রতিশ্রুতিবদ্ধ অবস্থানে কোনও ফাইল পুনরায় সেট করতে পারেন:

git reset <commit_before_first_unwanted_change> -- <file>

তারপরে আপনি git add -i <file>যে পরিবর্তনগুলি রাখতে চান তা পর্যালোচনা করতে, git checkout -- <file>অযাচিত পরিবর্তনগুলি দূরে ফেলতে এবং পরিবর্তনগুলি git reset -- <file>'আনস্টেজ' করার জন্য পূর্ববর্তী রেসিপিটি অনুসরণ করতে পারেন ।


0

এখানে উত্তরের বর্ণনায় বর্ণিত কমান্ড লাইন বিকল্পগুলি ফাইলটি যখন কোনও সার্ভারে রাখা হয় যা আমি একটি এসএস টার্মিনালের মাধ্যমে অ্যাক্সেস করছি hand যাইহোক, ফাইলটি যখন আমার স্থানীয় মেশিনে থাকে তখন আমি নিম্নলিখিত পদ্ধতিটি পছন্দ করি:

নেটবিন্স সম্পাদকটিতে ফাইলটি খুলুন (যা গিট সমর্থন সহ আসে)। নেটবিনগুলি রেফারেন্স নম্বরগুলিতে লাল / সবুজ / নীল চিহ্ন রাখে যেখানে স্টাফগুলি মুছে ফেলা / যুক্ত / সংশোধিত (যথাক্রমে) করা হয়েছে indicate

এই চিহ্নগুলির যে কোনও একটিতে ডান ক্লিক করা আপনাকে সেই পরিবর্তনটিকে পূর্বাবস্থায় ফেলার বিকল্প দেয়। এছাড়াও, পপআপে পুরাতন সংস্করণটি দেখতে আপনি লাল এবং নীল চিহ্নগুলিতে ডান ক্লিক করতে পারেন।

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