গীতে পুরানো প্রতিশ্রুতি বার্তা পরিবর্তন করুন


136

আমি এখানে বর্ণিত হিসাবে একটি পুরানো প্রতিশ্রুতি বার্তা সম্পাদনা করার চেষ্টা ছিল ।

জিনিসটি এখন, যখন আমি rebase -i HEAD~5এটি চালানোর চেষ্টা করি তখন বলে interactive rebase already started

তাহলে আমি চেষ্টা করি: git rebase --continueতবে এই ত্রুটিটি পেয়েছি:

error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba
fatal: Cannot lock the ref 'refs/heads/master'.

কোন ধারনা?

উত্তর:


125

এটা বলে:

আপনি যখন সম্পাদকটি সংরক্ষণ এবং প্রস্থান করবেন, তখন আপনাকে সেই তালিকার শেষ প্রতিশ্রুতিতে ফিরিয়ে আনবে এবং নিম্নলিখিত বার্তার সাহায্যে আপনাকে কমান্ড লাইনে ফেলে দেবে:

$ git rebase -i HEAD~3
Stopped at 7482e0d... updated the gemspec to hopefully work better
You can amend the commit now, with

এটা মানে না:

আবার টাইপ করুন git rebase -i HEAD~3

সম্পাদক থেকে বেরিয়ে যাওয়ার সময় টাইপ না করার চেষ্টা করুন git rebase -i HEAD~3এবং এটি ভাল কাজ করা উচিত।
(অন্যথায়, আপনার নির্দিষ্ট পরিস্থিতিতে, git rebase -i --abortসবকিছু পুনরায় সেট করার জন্য আপনাকে আবার চেষ্টা করার প্রয়োজন হতে পারে)


হিসাবে ডেভ Vogt আরো মন্তব্য উল্লেখ করেছে, git rebase --continue, rebasing প্রক্রিয়ায় পরবর্তী কাজের যাচ্ছে জন্য পরে আপনি প্রথম কমিট সংশোধিত থাকেন

এছাড়াও, গ্রেগ লিন্ড উল্লেখ করেছে তার উত্তর rewordনির্দেশেgit rebase :

কমান্ড "পিক" কমান্ডটি "সম্পাদনা" দিয়ে প্রতিস্থাপন করে, আপনি git rebaseসেই প্রতিশ্রুতি প্রয়োগের পরে থামতে বলতে পারেন, যাতে আপনি ফাইলগুলি এবং / অথবা প্রতিশ্রুতি বার্তা সম্পাদনা করতে পারেন, প্রতিশ্রুতি সংশোধন করতে পারেন এবং পুনরায় চালানো চালিয়ে যেতে পারেন।

যদি আপনি কেবল pickrewordকমিটের জন্য প্রতিশ্রুতি বার্তা সম্পাদনা করতে চান তবে Git1.6.6 (জানুয়ারী 2010) থেকে " " কমান্ডটি " " কমান্ডের সাথে প্রতিস্থাপন করুন

এটি editইন্টারেক্টিভ রিবেস চলাকালীন একই কাজ করে ' ', কেবলমাত্র শেলটিতে নিয়ন্ত্রণ না দিয়েই আপনাকে প্রতিশ্রুতি বার্তা সম্পাদনা করতে দেয় । এটি অত্যন্ত কার্যকর।
বর্তমানে আপনি যদি আপনার প্রতিশ্রুতিবদ্ধ বার্তাগুলি পরিষ্কার করতে চান তবে:

$ git rebase -i next

তারপরে সমস্ত সম্পাদনা 'সম্পাদনা' তে সেট করুন। তারপরে প্রতিটি এক:

# Change the message in your editor.
$ git commit --amend
$ git rebase --continue

' reword' এর পরিবর্তে ' ' ব্যবহার করা editআপনাকে কল git-commitএবং git-rebaseকলগুলি এড়িয়ে যেতে দেয়


2
এছাড়াও, git rebase --continueপ্রথম প্রতিশ্রুতি সংশোধন করার পরে, প্রত্যাবাসন প্রক্রিয়াটির পরবর্তী কাজগুলিতে যায়।
ডেভ ভোগ্ট

1
প্রতিশ্রুতি বার্তা পরিবর্তনের জন্য গিথুব উইকি নিবন্ধটিতে লিঙ্ক যুক্ত করা হচ্ছে
জয়

60

গ্রেগ লিন্ডের পরামর্শ অনুসারে, আপনি কেবল প্রতিশ্রুতি বার্তা পরিবর্তন করতে অনুরোধ জানাতে পাঠ্যগুলি ব্যবহার করতে পারেন (এবং অন্যথায় প্রতিশ্রুতি অক্ষত রেখে দিন):

git rebase -i HEAD~n

এখানে nসর্বশেষ এন কমিটগুলির তালিকা is

উদাহরণস্বরূপ, আপনি যদি ব্যবহার করেন তবে আপনি git rebase -i HEAD~4এটির মতো কিছু দেখতে পাবেন:

pick e459d80 Do xyz
pick 0459045 Do something
pick 90fdeab Do something else
pick facecaf Do abc

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

pick e459d80 Do xyz
reword 0459045 Do something
reword 90fdeab Do something else
pick facecaf Do abc

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

প্রতিশ্রুতি বার্তা পরিবর্তন করার জন্য গিটহাবের পৃষ্ঠাতে আরও জানুন ।


খুব ভাল ব্যাখ্যা করা হয়েছে। ধন্যবাদ: ডি
শুভম জৈন

ধন্যবাদ শুভজাইন শুভ যে আমার উত্তরটি কার্যকর হয়েছিল
পুনিত বারা

আমি এটি করেছি, এবং তারপরে অন্যান্য শাখা থেকে প্রকাশিত হওয়া আমার শাখায় প্রদর্শিত হবে
রেজা

@ রেজা আপনি হয়ত কিছু ভুলিয়ে ফেলেছেন। অন্য কোনও রেপোতে এটি ব্যবহার করে দেখুন। এই সমাধানটি নিখুঁতভাবে কাজ করে
পুনিত বারা

54

এফডব্লিউআইডাব্লু, গিট রিবেস ইন্টারেক্টিভের এখন একটি "রিওয়ার্ড" বিকল্প রয়েছে যা এটিকে অনেক কম বেদনাদায়ক করে তোলে!


3
ব্যবহার করার সময় reword, গিট কেন কেবল কমিটের তালিকার সাথে সেই ফাইলটিতে কমিট বার্তা সম্পাদনা করতে দেয় না? পরিবর্তে এটি প্রতি rewordলাইনে একটি প্রতিশ্রুতি বার্তা ফাইল সহ সম্পাদক চালু করবে । এটি কেবল অপ্রয়োজনীয়। এমনকি যদি বাইরের কমান্ডগুলি প্রবর্তন করা pickবা rewordআরম্ভ করার প্রয়োজন হয় তবে এটির rewordপ্রয়োজন হবে না।
ড্যান ড্যাসক্লেস্কু

9

এই জন্য একটি পৃথক বিকল্প প্রদান করতে চেয়েছিলেন। আমার ক্ষেত্রে, আমি সাধারণত আমার স্বতন্ত্র শাখাগুলিতে কাজ করি তারপরে মাস্টারের সাথে একীভূত হয় এবং আমি আমার স্থানীয়কে যে ব্যক্তিগত প্রতিশ্রুতি করি তা অত গুরুত্বপূর্ণ নয়।

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

সুতরাং আমি যা করেছি তা হ'ল সর্বশেষ মাস্টার থেকে একটি নতুন শাখা তৈরি করা এবং স্কোয়াশের সমস্ত শাখা সমস্যা শাখা থেকে নতুন শাখায় একক প্রতিশ্রুতিতে পরিণত করা। এটি আমার পক্ষে সহজ ছিল এবং আমি মনে করি এটি ভবিষ্যতের উল্লেখ হিসাবে এখানে রাখা ভাল ধারণা।

সর্বশেষ মাস্টার থেকে:

git checkout -b new-branch

তারপর

git merge --squash problem-branch
git commit -m "new message" 

রেফারেস: https://github.com


1
আপনার উত্তর সত্যিই আমার দিন সংরক্ষণ করেছে :)। আমি rebase -iপ্রায় ২ ঘন্টার মতো লড়াই করে যাচ্ছিলাম এবং কোনও সাফল্য নেই। আমার প্রতিশ্রুতি 18 টি কমিটের পিছনে ছিল, যাতে আপনি কল্পনা করতে পারেন। এটি সহজ এবং সহজ উপায় আমি পুনরায় ব্যবহারের প্রয়োজন ছাড়াই খুঁজে পেতে পারি। ধন্যবাদ বন্ধু!
কার্লোস প্যারা

6

এখানে একটি খুব সুন্দর গিস্ট যা সম্ভাব্য সমস্ত কেসগুলি কভার করে: https://gist.github.com/nepsilon/156387acf9e1e72d48fa35c4fabef0b4

সংক্ষিপ্ত বিবরণ:

git rebase -i HEAD~X
# X is the number of commits to go back
# Move to the line of your commit, change pick into edit,
# then change your commit message:
git commit --amend
# Finish the rebase with:
git rebase --continue
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.