গিট: 'গিট রিসেট' এর পরে কমিট প্রতিবেদনগুলি কীভাবে পুনরায় ব্যবহার / ধরে রাখতে হবে?


103

গীত ব্যবহারকারী হিসাবে আমি নিয়মিত অবস্থা জুড়ে আসা, আমি একটি উপায় যার মধ্যে মাপসই করা হবে না এক বা একাধিক করে rework প্রয়োজন --amendবা rebase -iফিক্সআপ করে সঙ্গে। সাধারণত আমি এই জাতীয় কিছু করব

git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?

আমি বোধগম্য রচনাবদ্ধ প্রতিশ্রুতিগুলি বেশ গুরুতরভাবে গ্রহণ করি। এগুলিতে সাধারণত পরিবর্তনের রেফারেন্স এবং ন্যায়সঙ্গত সহ বৃহত্তর পাঠ্য থাকে। এখন অবধি, আমি আমার পুরানো প্রতিশ্রুতি বার্তাটি একটি অরসোর্টেড git reflog, git logএবং অনুলিপি এবং পেস্ট প্রক্রিয়াটির মাধ্যমে পুনরুদ্ধার করতে দীর্ঘতর প্রক্রিয়াটিতে বেশ বিরক্ত আছি ।

এটি মোকাবেলা করার জন্য আরও ভাল কি আছে? এবং এটি কীভাবে হবে, যদি আমার একের বেশি কমিট থাকে?

সম্পাদনা: এই সম্পর্কে একটু চিন্তা করার পর আমি মনে করি আমি কি খুঁজছি কিছু হয় Git লুকোবার জায়গা বার্তা যেখানে ফিক্সআপ / সংশোধন করে উপযুক্ত নয় কমিট জন্য -একটি কার্যকারিতা।


2
আপনি যদি সব করেন git reset head~1তবে আপনার পুরানো প্রতিশ্রুতি বার্তাটি কি কেবল ২ য় এন্ট্রি হবে না reflog?

হ্যাঁ - তবে আমি কীভাবে অনুলিপি এবং
পেষ্টিং

আজকাল, খালি gitkখোলা আছে। এইভাবে আপনাকে রিফলগও ব্যবহার করতে হবে না। বিকল্পভাবে, rev-parse <branch>পুনরায় সেট করার আগে আপনার হ্যাশ পেতে ব্যবহার করুন এবং আইবিজামানের উত্তরটি ব্যবহার করুন।
cst1992

উত্তর:


141

এর পরে git reset, এই ওয়ান-লাইনার এটি করতে পারে:

git commit --reuse-message=HEAD@{1}

বা আরও ছোট:

git commit -C HEAD@{1}

আপনি @ user2718704 দ্বারা প্রদত্ত অন্যান্য বিকল্পগুলি ব্যবহার করতে পারেন ।


6
সংক্ষিপ্ত:git commit -C@@{1}
ফু এনজিও

2
এটি রিফ্লোগের দুর্দান্ত ব্যবহার
ডেভিড মান

22
পুনরায় সেট করার পরে, ORIG_HEAD সেট করা আছে। আমি git commit --reuse-message=ORIG_HEADসবচেয়ে পরিষ্কার বলে মনে করি।
স্কট জ্যাকবসন

45

"গিট কমিট" কমান্ড চালানোর সময়, আপনাকে নিম্নলিখিত বিকল্পগুলি পরীক্ষা করতে হবে,

পুনরায় ব্যবহার করার জন্য,

--reuse-message=<commit>

পুনঃব্যবহারে সম্পাদনা করতে,

--reedit-message=<commit>

লেখক পরিবর্তন করতে,

--reset-author

1
এটিকে নতুন সমাধান হিসাবে চিহ্নিত করা হয়েছে, কারণ এটি সর্বাধিক ব্যাপক উত্তর সরবরাহ করেছে। যদিও এই সমাধানটি এখনও আমার 'পুনরুদ্ধার' সমস্যাগুলি পুরোপুরি সমাধান করে না।
বেন্টোলার

9

কেন আপনি যদি হ্যাক, ফিক্স, হ্যাক এবং ঠিক তখন চালাতে পারেন তবে পুনরায় সেট করুন git commit --amend --no-edit; সুতরাং, আপনার মূল প্রতিশ্রুতি বার্তা বজায় রাখা।

এটি একাধিক প্রতিশ্রুতিগুলির জন্য কাজ করার জন্য, কেবলমাত্র আপনার নতুন পরিবর্তনগুলির সাথে একটি অস্থায়ী প্রতিশ্রুতি তৈরি করুন এবং তারপরে পুরানো প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতিবদ্ধ বার্তাটি রেখে নতুন অস্থায়ীটির সাথে পূর্ববর্তী প্রতিশ্রুতি (ভাল প্রতিশ্রুতি সম্বলিত) স্কোয়াশ করার জন্য একটি ইন্টারেক্টিভ রিবেস ব্যবহার করুন।


2
একটি ইন্টারেক্টিভ রিবেস করার সময়, আপনি এমনকি fixupনির্দেশটি ব্যবহার করতে পারেন যে পরবর্তী প্রতিশ্রুতিটি পূর্ববর্তী প্রতিশ্রুতিটি ঠিক করা এবং এটি স্বয়ংক্রিয়ভাবে ফিক্সআপ কমিট থেকে বার্তাটি বাতিল করার থেকে কমিট বার্তাটি ব্যবহার করবে।
কিউএকএক্স

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

@ বেন্টবেলিন ওয়েল, ইন্টারেক্টিভ রিবেস আপনাকে নির্দিষ্ট কমিটের বিস্তৃত যে কোনও প্রতিশ্রুতি পরিবর্তন করতে দেয়। এটি কঠোরভাবে HEAD প্রতিশ্রুতি দেয় না যে পরিবর্তন করতে হবে।
mart1n

@ আউট singling জন্য mart1n ধন্যবাদ সম্পাদন করা মধ্যে rebase -i। কখনও সে প্রসঙ্গে ব্যবহার করা হয়নি। বাকী ক্ষেত্রে যেমন অন্য উত্তরটি পুনরায় মার্জ করা আমার প্রশ্নের পক্ষে আরও উপযুক্ত, তাই আমি সেটিকে উত্তর হিসাবে চিহ্নিত করেছি।
বেন্টোলার

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

5

আপনি বিবেচনা করতে পারেন git commit --reset-author -c <commit>, সম্পাদনা এবং বর্তমান সময়ের সাথে প্রতিশ্রুতি বার্তা পুনরায় ব্যবহার করতে।


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