আমি একটি প্রতিশ্রুত বার্তায় ভুল জিনিস লিখেছি।
আমি কীভাবে বার্তা পরিবর্তন করতে পারি? প্রতিশ্রুতি এখনও ধাক্কা হয় নি।
আমি একটি প্রতিশ্রুত বার্তায় ভুল জিনিস লিখেছি।
আমি কীভাবে বার্তা পরিবর্তন করতে পারি? প্রতিশ্রুতি এখনও ধাক্কা হয় নি।
উত্তর:
git commit --amend
আপনার সম্পাদকটি খুলবে, আপনাকে সর্বাধিক সাম্প্রতিক প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতি পরিবর্তন করার অনুমতি দেয়। অতিরিক্তভাবে, আপনি কমান্ড লাইনে সরাসরি এই বার্তাটি সেট করতে পারেন:
git commit --amend -m "New commit message"
… তবে, এটি বহু-লাইন প্রতিশ্রুতিবদ্ধ বার্তাগুলি বা ছোট সংশোধনগুলিকে প্রবেশ করতে আরও জটিল করে তুলতে পারে।
এটি করার আগে আপনার কোনও কার্যকরী অনুলিপি মঞ্চস্থ হয় না তা নিশ্চিত হন বা তারাও প্রতিশ্রুতিবদ্ধ হবেন। ( অবিরত পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ হবে না))
যদি আপনি ইতিমধ্যে আপনার প্রতিশ্রুতিটি আপনার প্রত্যন্ত শাখায় ঠেলে দিয়ে থাকেন, তবে - স্থানীয়ভাবে আপনার প্রতিশ্রুতি সংশোধন করার পরে (উপরে বর্ণিত) - আপনাকেও প্রতিশ্রুতিটি চাপিয়ে দিতে বাধ্য করতে হবে :
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
সতর্কতা: জোর করে চাপানো আপনার স্থানীয় অবস্থার সাথে দূরবর্তী শাখাকে ওভাররাইট করে । দূরবর্তী ডালে করে আছে আপনার স্থানীয় শাখায় না থাকে তাহলে, আপনি হবে যারা করে হারান।
সতর্কতা: আপনি ইতিমধ্যে অন্যান্য লোকদের সাথে ভাগ করে নিয়েছেন এমন অঙ্গীকার সংশোধন সম্পর্কে সতর্ক থাকুন। করে সংশোধনের মূলত নতুন করে লেখা হয় তাদের বিভিন্ন আছে রয়েছে SHA আইডি, যা সমস্যার সৃষ্টি করে যদি অন্য মানুষ কমিট পুরাতন কপি আপনি পুনর্লিখিত থাকেন আছে। পুরানো প্রতিশ্রুতিটির অনুলিপি থাকা যে কোনও ব্যক্তিকে তাদের কাজটি আপনার নতুন লিখিত প্রতিশ্রুতিগুলির সাথে সমন্বয় করা দরকার যা কখনও কখনও কঠিন হতে পারে, তাই ভাগ্যবদ্ধ প্রতিশ্রুতিবদ্ধ ইতিহাস পুনরায় লেখার চেষ্টা করার সময় আপনি অন্যের সাথে সমন্বয় সাধন করে নিশ্চিত হন, বা ভাগ করা কমিটগুলি পুনরায় লেখার বিষয়টি এড়াতে চান পুরাপুরি।
আর একটি বিকল্প ইন্টারেক্টিভ রিবেস ব্যবহার করা হয়। এটি আপনাকে সর্বশেষতম বার্তা না হলেও আপনি আপডেট করতে চান এমন কোনও বার্তা সম্পাদনা করার অনুমতি দেয়।
গিট স্কোয়াশ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
একবার আপনি আপনার প্রতিশ্রুতি স্কোয়াশ করে দিলে - e/r
বার্তা সম্পাদনা করার জন্য চয়ন করুন :
আপনি যখন ব্যবহার করবেন তখন কমিটের চেয়েও বেশিgit rebase -i HEAD~n
কিছু হতে পারে । গিট শেষ এনটি কমিট করে সমস্ত কমিটিকে "সংগ্রহ" করবে এবং যদি এই সীমার মধ্যে কোথাও একত্রিত হয় তবে আপনি সমস্ত কমিটগুলি দেখতে পাবেন, সুতরাং ফলাফলটি এন + হবে।
যদি আপনাকে এটি একটি একক শাখার বেশি করার জন্য করতে হয় git rerere
এবং সামগ্রী সংশোধন করার সময় আপনি বিবাদগুলির মুখোমুখি হতে পারেন, সেট আপ করুন এবং গিটকে আপনার জন্য স্বয়ংক্রিয়ভাবে এই দ্বন্দ্বগুলি সমাধান করতে দিন।
git commit --amend
হিসাবে শক্তিশালী না git rebase -i
।
git commit --amend
(ক?) মাস্টার কমিট ঠিক করতে পারে।
git push -f origin branchname
git push -f
কিছুটা বিপজ্জনক নয় যদি অন্য লোকেরা একই ভান্ডার ব্যবহার করে?
git commit --amend -c HEAD
। এটি সম্পাদকটি আপনার পুরানো প্রতিশ্রুতি বার্তার সাহায্যে প্রাক-জনসম্মুখে খোলে যা আপনি এটি পরিবর্তন করতে পারবেন।
git commit --amend -m "your new message"
আপনি যে প্রতিশ্রুতিটি ঠিক করতে চান সেটি যদি সাম্প্রতিকতম না হয়:
git rebase --interactive $parent_of_flawed_commit
আপনি যদি বেশ কয়েকটি ত্রুটিযুক্ত কমিটগুলি ঠিক করতে চান তবে তাদের মধ্যে সবচেয়ে পুরানো পিতামাতাকে পাস করুন।
আপনি যেটি দিয়েছেন তার থেকে সমস্ত কমিটের একটি তালিকা সহ একজন সম্পাদক আসবেন।
pick
করার জন্য reword
(অথবা পুরানো গীত এর সংস্করণ উপর edit
) কোন করে আপনি ঠিক করতে চান সামনে।প্রতিটি কমিট জন্য আপনি করতে চান ভিন্ন শব্দে রচনা , গীত আপনি আপনার এডিটর ফিরে পতিত হবে। আপনি সম্পাদনা করতে চান এমন প্রতিটি প্রতিশ্রুতির জন্য , গিট আপনাকে শেলের মধ্যে ফেলে দেয়। আপনি যদি শেলটিতে থাকেন:
git commit --amend
git rebase --continue
এই ক্রমটির বেশিরভাগটি আপনাকে বিভিন্ন কমান্ডের আউটপুট দ্বারা আপনাকে যাওয়ার সময় ব্যাখ্যা করবে। এটা খুব সহজ; আপনার এটি মুখস্ত করার দরকার নেই - কেবল মনে রাখবেন যে git rebase --interactive
তারা যতদিন আগেই হোক না কেন কমিটগুলি সংশোধন করতে দেয়।
মনে রাখবেন যে আপনি ইতিমধ্যে ঠেলে দেওয়া কমিটগুলি পরিবর্তন করতে চান না। অথবা আপনি এটি করতে পারেন তবে সেই ক্ষেত্রে আপনাকে যে সকল ব্যক্তি আপনার কমিটগুলি টেনে নিয়েছে এবং তার উপরে কাজ করেছে তাদের সবার সাথে যোগাযোগের জন্য আপনাকে খুব যত্ন নিতে হবে। কেউ পুনর্নির্মাণ বা প্রকাশিত শাখায় পুনরায় সেট করার পরে কীভাবে পুনরুদ্ধার করব?
reword
জায়গায় ব্যবহার করতে পারেন pick
।
$parent_of_flawed_commit
সমতুল্য $flawed_commit^
।
-p
( --preserve-merges
)।
পূর্ববর্তী প্রতিশ্রুতি সংশোধন করতে, আপনি চান পরিবর্তনগুলি করুন এবং সেই পরিবর্তনগুলি মঞ্চ করুন এবং তারপরে চালান
git commit --amend
এটি আপনার পাঠ্য সম্পাদকটিতে আপনার নতুন প্রতিশ্রুতি বার্তা উপস্থাপন করে একটি ফাইল খুলবে। এটি আপনার পুরানো প্রতিশ্রুতি বার্তা থেকে পাঠ্য সহ পপুলেট শুরু হয়। আপনি যেমন চান তেমন প্রতিশ্রুতি বার্তা পরিবর্তন করুন, তারপরে ফাইলটি সংরক্ষণ করুন এবং আপনার সম্পাদকটি সমাপ্ত করতে প্রস্থান করুন।
পূর্বের প্রতিশ্রুতি সংশোধন করতে এবং একই লগ বার্তা রাখতে, চালান
git commit --amend -C HEAD
পূর্ববর্তী প্রতিশ্রুতিটি সম্পূর্ণরূপে সরিয়ে ফিক্স করতে, চালান
git reset --hard HEAD^
আপনি যদি একাধিক প্রতিশ্রুতি বার্তা সম্পাদনা করতে চান তবে চালান
git rebase -i HEAD~commit_count
( আপনি সম্পাদনা করতে চান এমন কমিটের সংখ্যার সাথে কমিট_কাউন্টটি প্রতিস্থাপন করুন )) এই আদেশটি আপনার সম্পাদককে প্রবর্তন করে। "বাছাই" না করে "সম্পাদনা" হিসাবে প্রথম প্রতিশ্রুতি (আপনি যেটিকে পরিবর্তন করতে চান) চিহ্নিত করুন, তারপরে সংরক্ষণ করুন এবং আপনার সম্পাদকটি প্রস্থান করুন। আপনি যে পরিবর্তনটি করতে চান তা করুন এবং তারপরে চালান
git commit --amend
git rebase --continue
দ্রষ্টব্য: খোলার সম্পাদক থেকে আপনি "আপনার নিজের পছন্দ পরিবর্তন করুন" করতে পারেন git commit --amend
git rebase -i HEAD~commit_count
আপনি চয়ন করেছেন এমন অনেকগুলি কমিটের প্রতিশ্রুতিবদ্ধ বার্তাগুলি পরিবর্তন করতেও আপনাকে অনুমতি দেবে। কেবল নির্বাচিত কমিটগুলি "বাছাই" এর পরিবর্তে "শব্দ" হিসাবে চিহ্নিত করুন
git reset --hard
নির্বিঘ্নিত পরিবর্তনকে নির্মূল করে। --hard
সঙ্গে প্রতিস্থাপন করুন --soft
।
git reset --hard
একটি নিখুঁত বৈধ আদেশ, কিন্তু প্রশ্নটি প্রদান করে এটি বিভ্রান্তিকর। আপনি --hard
যদি প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি দূরে নিক্ষেপ করতে চান তবে আপনি ব্যবহার করুন, যদি আপনি প্রতিশ্রুতি বার্তায় টাইপ করেন না!
ইতিমধ্যে উল্লিখিত হিসাবে, git commit --amend
শেষ প্রতিশ্রুতি মুছে ফেলার উপায়। একটি নোট: আপনি যদি ফাইলগুলি ওভাররাইট করতে চান তবে কমান্ডটি হবে
git commit -a --amend -m "My new commit message"
git add file.ext
তখনই করতে পারেনgit commit --amend
আপনি এটির জন্যও ব্যবহার করতে পারেন git filter-branch
।
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
এটি একটি তুচ্ছ হিসাবে সহজ নয় git commit --amend
, তবে এটি বিশেষত কার্যকর, যদি আপনার ভ্রান্ত প্রতিশ্রুতি বার্তার পরে ইতিমধ্যে কিছু সংহত হয়ে থাকে।
নোট করুন যে এটি প্রতিটি প্রতিশ্রুতি HEAD
এবং ত্রুটিযুক্ত প্রতিশ্রুতিগুলির মধ্যে পুনর্লিখনের চেষ্টা করবে , সুতরাং আপনার msg-filter
আদেশটি খুব বিজ্ঞতার সাথে বেছে নেওয়া উচিত ;-)
$flawed_commit^..HEAD
, দরকার নেই $flawed_commit..HEAD
। ম্যান পেজ অনুসারে বলা হয়েছে: command কমান্ডটি কেবলমাত্র কমান্ড লাইনে উল্লিখিত ইতিবাচক রেফগুলি পুনরায় লিখবে (উদাহরণস্বরূপ যদি আপনি a..b পাস করেন তবে কেবল খ পুনর্লিখন হবে)। »
আমি এইভাবে পছন্দ করি:
git commit --amend -c <commit ID>
অন্যথায়, নতুন কমিট আইডি সহ একটি নতুন প্রতিশ্রুতি থাকবে।
-c
কিছু বিষয় আছে। এটি ডিফল্টরূপে পুরানো বার্তাটি ব্যবহার করে তবে এটি লেখক সম্পর্কিত তথ্য (ব্যক্তি এবং সময়) অনুলিপি করে। -C
এটি আপনাকে বার্তা সম্পাদনা করতে বলবে না except একই জিনিসটি করে।
fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
আপনি যদি গিট জিইউআই সরঞ্জামটি ব্যবহার করে থাকেন তবে এখানে একটি বোতাম রয়েছে যা সংশোধিত সর্বশেষ প্রতিশ্রুতিবদ্ধ । সেই বোতামটিতে ক্লিক করুন এবং তারপরে এটি আপনার শেষ প্রতিশ্রুতিবদ্ধ ফাইল এবং বার্তা প্রদর্শন করবে। কেবলমাত্র সেই বার্তাটি সম্পাদনা করুন এবং আপনি এটি একটি নতুন প্রতিশ্রুতি বার্তা দিয়ে প্রতিশ্রুতিবদ্ধ করতে পারেন।
বা কনসোল / টার্মিনাল থেকে এই আদেশটি ব্যবহার করুন:
git commit -a --amend -m "My new commit message"
আপনি গিট রিবেসিং ব্যবহার করতে পারেন । উদাহরণস্বরূপ, আপনি বিবিসি 3৪৩ সিডির প্রতিশ্রুতিবদ্ধ করতে যদি আবার পরিবর্তন করতে চান তবে চালান run
$ git rebase bbc643cd^ --interactive
ডিফল্ট সম্পাদকে, আপনি যে লাইনের প্রতিশ্রুতি পরিবর্তন করতে চান তাতে লাইনে 'সম্পাদনা' করতে 'বাছাই' পরিবর্তন করুন। আপনার পরিবর্তনগুলি করুন এবং তারপরে এগুলি মঞ্চস্থ করুন
$ git add <filepattern>
এখন আপনি ব্যবহার করতে পারেন
$ git commit --amend
প্রতিশ্রুতি পরিবর্তন করতে এবং তারপরে
$ git rebase --continue
আগের মাথা প্রতিশ্রুতি ফিরে।
git commit --amend
প্রভাবিত হয়েছে আপনি এটি ব্যবহার করতে পারেন git show
এবং এটি নতুন বার্তাটি প্রদর্শন করবে।
আপনি যদি কেবলমাত্র আপনার শেষ প্রতিশ্রুতি বার্তাটি পরিবর্তন করতে চান তবে করুন:
git commit --amend
এটি আপনাকে আপনার পাঠ্য সম্পাদকের মধ্যে ফেলে দেবে এবং আপনাকে শেষ প্রতিশ্রুতি বার্তাটি পরিবর্তন করতে দেবে।
আপনি যদি শেষ তিনটি প্রতিশ্রুতি বার্তা বা সেই বিন্দু অবধি কোনও প্রতিশ্রুতিবদ্ধ বার্তা পরিবর্তন করতে চান HEAD~3
তবে git rebase -i
কমান্ডটি সরবরাহ করুন :
git rebase -i HEAD~3
git commit --amend
, এবং এটা বলছেন যে আপনি ব্যবহার করতে পারেন git rebase -i HEAD~commit_count
, সব তুমি করেছ মধ্যে প্লাগ ছিল 3
জন্য commit_count
।
যদি আপনাকে একাধিক শাখায় পুরানো প্রতিশ্রুতি বার্তা পরিবর্তন করতে হয় (যেমন, ভ্রান্ত বার্তাটি দিয়ে প্রতিশ্রুতি একাধিক শাখায় উপস্থিত রয়েছে) আপনি ব্যবহার করতে পারেন:
git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
গিটটি পুনরায় লেখার জন্য এবং এর মধ্যে পুরানো রেফারেন্সগুলিকে ব্যাকআপ করার জন্য একটি অস্থায়ী ডিরেক্টরি তৈরি করবে refs/original/
।
-f
অপারেশন কার্যকর করা কার্যকর করবে। অস্থায়ী ডিরেক্টরি ইতিমধ্যে উপস্থিত থাকলে বা যদি ইতিমধ্যে অধীন সঞ্চিত রেফারেন্স থাকে তবে এটি প্রয়োজনীয় refs/original
। যদি এটি না হয় তবে আপনি এই পতাকাটি ফেলে দিতে পারেন।
--
ফিল্টার-শাখা বিকল্পগুলি পুনর্বিবেচনার বিকল্পগুলি থেকে পৃথক করে।
--all
সমস্ত শাখা এবং ট্যাগগুলি নতুন করে লেখা হয়েছে তা নিশ্চিত করবে ।
আপনার পুরানো রেফারেন্সগুলির ব্যাকআপের কারণে আপনি কমান্ডটি কার্যকর করার আগে সহজেই রাজ্যে ফিরে যেতে পারেন।
বলুন, আপনি আপনার মাস্টারকে পুনরুদ্ধার করতে এবং শাখায় এটি অ্যাক্সেস করতে চান old_master
:
git checkout -b old_master refs/original/refs/heads/master
git commit --amend
মন্তব্যগুলি ঠিক করতে বা আমি ভুলে যাওয়া ফাইলগুলি যুক্ত করতে ব্যবহার করি git add
তবে আমি সম্পাদনার আগে কখনওgit push
। আমি git filter-branch
যখন সংস্করণ ইতিহাসের সাথে পুরোপুরি গণ্ডগোল করতে চাই তখন আমি এটিও ব্যবহার করি, তবে ওপি এটি চায় না, সুতরাং এই উত্তরের জন্য একটি বড় স্বাস্থ্যের সতর্কতা দরকার - ঘরে এটি চেষ্টা করবেন না, উঁকি দিচ্ছে !!
ব্যবহার
git commit --amend
এটি বিশদটি বুঝতে, একটি দুর্দান্ত পোস্ট হ'ল 4 গিট ইতিহাসের পুনর্লিখন । এটি কখন ব্যবহার করবেন না সে সম্পর্কেও কথা বলে git commit --amend
।
git commit --amend
উত্তর ইতিমধ্যে (বেশ কয়েক বার) দেওয়া হয়েছে আগে আপনি পুলিশের লিখেছিলেন। আপনি কেন আবার পোস্ট করলেন? আপনি যদি "পুনর্লিখন গীতের ইতিহাস" এ একটি লিঙ্ক যুক্ত করতে চান তবে আপনি বিদ্যমান উত্তরগুলির মধ্যে একটি সম্পাদনা করতে বা মন্তব্য করতে পারেন।
আপনার কাছে এখানে বেশ কয়েকটি বিকল্প রয়েছে। আপনি করতে পারেন
git commit --amend
যতক্ষণ না এটি আপনার শেষ প্রতিশ্রুতি
অন্যথায়, এটি যদি আপনার শেষ প্রতিশ্রুতি না হয় তবে আপনি একটি ইন্টারেক্টিভ রিবেস করতে পারেন,
git rebase -i [branched_from] [hash before commit]
তারপরে ইন্টারেক্টিভ রিবেসের অভ্যন্তরে আপনি কেবল সেই প্রতিশ্রুতিতে সম্পাদনা যুক্ত করুন। যখন এটি আসে, একটি করুন git commit --amend
এবং প্রতিশ্রুতি বার্তাটি সংশোধন করুন। যদি আপনি এই প্রতিশ্রুতিবদ্ধ বিন্দুর আগে ফিরে যেতে চান, আপনি এটি ব্যবহার করতে git reflog
এবং কেবল সেই প্রতিশ্রুতি মুছতে পারেন। তারপরে আপনি git commit
আবার কিছু করবেন।
এটি যদি আপনার শেষ প্রতিশ্রুতি থাকে তবে কেবল প্রতিশ্রুতি সংশোধন করুন:
git commit --amend -o -m "New commit message"
( আপনি কেবল প্রতিশ্রুতি বার্তা পরিবর্তন করেছেন তা নিশ্চিত করতে -o
( --only
) পতাকা ব্যবহার করে )
যদি এটি একটি সমাধি প্রতিশ্রুতিবদ্ধ হয় তবে দুর্দান্ত ইন্টারেক্টিভ রিবেসটি ব্যবহার করুন :
git rebase -i @~9 # Show the last 9 commits in a text editor
কমিট আপনি চান, পরিবর্তন খুঁজুন pick
করার r
( reword
), এবং সংরক্ষণ করুন এবং বন্ধ ফাইল। সম্পন্ন!
মিনিয়েচার ভিম টিউটোরিয়াল (বা, কীভাবে কেবল 8 টি কীস্ট্রোক দিয়ে রিবেস করবেন 3j
cw
r
EscZZ
):
vimtutor
সময় পেলে দৌড়াওh
j
k
l
আন্দোলনের কীগুলির সাথে সমান ←↓↑→3j
তিনটি রেখা নিচে সরানোi
সন্নিবেশ মোডে প্রবেশ করতে - আপনার টাইপ করা পাঠ্যটি ফাইলটিতে উপস্থিত হবেc
সন্নিবেশ মোড থেকে প্রস্থান করতে এবং "স্বাভাবিক" মোডে ফিরে যেতেu
পূর্বাবস্থাr
আবার করাdd
, dw
, dl
একটি লাইন, শব্দ, বা চিঠি যথাক্রমে মুছে ফেলতেcc
, cw
, cl
একটি লাইন, শব্দ, বা চিঠি যথাক্রমে পরিবর্তন করতে (হিসাবে একই dd
i
)yy
, yw
, yl
( "Yank"), যথাক্রমে কপি করতে একটি লাইন, শব্দ, বা চিঠিp
বা P
যথাক্রমে বর্তমান অবস্থানের পরে বা পরে আটকানো:w
Enter একটি ফাইল সংরক্ষণ (লিখতে):q!
Enter সংরক্ষণ না করে প্রস্থান করা:wq
Enterবা ZZ
সংরক্ষণ এবং ছেড়ে দিতেআপনি যদি অনেকগুলি পাঠ্য সম্পাদনা করেন, তবে ডিভোরাক কীবোর্ড বিন্যাসে স্যুইচ করুন , টাচ-টাইপ করতে শিখুন এবং ভিম শিখুন। এটি কি মূল্যবান? হ্যাঁ.
প্রোটিপ ™: ইতিহাসকে পুনর্লিখন করে এমন "বিপজ্জনক" আদেশগুলি নিয়ে পরীক্ষা করতে ভয় করবেন না - গিট ডিফল্টরূপে 90 দিনের জন্য আপনার কমিটগুলি মুছে দেয় না; আপনি এগুলি রিফ্লগে খুঁজে পেতে পারেন:
$ git reset @~3 # Go back three commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
* যেমন --hard
এবং --force
যদিও বিকল্পগুলি দেখুন - তারা ডেটা বাতিল করতে পারে।
* এছাড়াও, আপনি সহযোগিতা করছেন এমন কোনও শাখায় ইতিহাস পুনর্লিখন করবেন না।
nano
? আমরা তুচ্ছ পরিবর্তনগুলির বিষয়ে কথা বলছি যা কোনও পাঠ্য ফাইলে তৈরি করা দরকার, হার্ডডিং কোডিং নয় যা "সেরা" পাঠ্য সম্পাদককে নিয়ে শিখা যুদ্ধের জন্ম দেয়।
ddjjpZZ
একটি প্রতিশ্রুতি 2 টি সরান moves বেসিক ভিম জ্ঞান সম্পর্কে আরকেন কিছুই নেই; ন্যানোর চেয়ে ভিমের সাথে আরও স্বাচ্ছন্দ্য বোধ করতে 10 মিনিট সময় লাগে।
আপনি যদি গিট জিইউআই ব্যবহার করে থাকেন তবে আপনি শেষ প্রতিশ্রুতিটি সংশোধন করতে পারেন যা ইতিবাচক নয়:
Commit/Amend Last Commit
আমি যতটা পারি গিট জিইউআই ব্যবহার করি এবং এটি আপনাকে শেষ প্রতিশ্রুতি সংশোধন করার বিকল্প দেয়:
এছাড়াও, git rebase -i origin/master
এটি একটি দুর্দান্ত মন্ত্র যা সর্বদা আপনাকে মাস্টারের শীর্ষে করা কমিটগুলির সাথে উপস্থিত করে তোলে এবং আপনাকে সংশোধন, মুছে ফেলা, পুনর্বিন্যাস বা স্কোয়াশের বিকল্প দেয়। প্রথমে সেই হ্যাশটি ধরে রাখার দরকার নেই।
বাহ, সুতরাং এটি করার অনেকগুলি উপায় রয়েছে।
এটি করার আরেকটি উপায় হ'ল শেষ প্রতিশ্রুতি মুছে ফেলা, তবে এর পরিবর্তনগুলি বজায় রাখুন যাতে আপনি আপনার কাজ হারাবেন না। তারপরে আপনি সংশোধিত বার্তাটি দিয়ে আরও একটি প্রতিশ্রুতিবদ্ধ করতে পারেন। এটি দেখতে এরকম কিছু দেখাচ্ছে:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
আমি কোনও ফাইল যুক্ত করতে বা পরিবর্তন করতে ভুলে গেলে আমি সর্বদা এটি করি।
--soft
পরিবর্তে নির্দিষ্ট করতে মনে রাখবেন--hard
, অন্যথায় আপনি এই প্রতিশ্রুতি পুরোপুরি হারাবেন।
git commit --amend
2-পদক্ষেপের প্রক্রিয়া ব্যতীত ঠিক একই জিনিসটি করে।
--amend
লেখকের তথ্য রাখবে, তবে প্রশ্নটি কেবল বার্তাটি পরিবর্তন করতে বলে।
পুরানো বার্তাগুলি সম্পাদনের জন্য উইন্ডোজ / ম্যাক জিইউয়ের সন্ধানের জন্য (যেমন কেবলমাত্র সর্বশেষতম বার্তা নয়), আমি উত্সট্রির পরামর্শ দেব । অনুসরণ করার পদক্ষেপগুলি নীচে রয়েছে।
যে প্রতিশ্রুতি এখনও রিমোটে ধাক্কা দেওয়া হয়নি:
Unable to create 'project_path/.git/index.lock': File exists.
। সমস্যাটি ঠিক কী তা নিশ্চিত নয়, এটি সোর্সট্রির ভবিষ্যতের সংস্করণে ঠিক করা হবে কিনা তা নিশ্চিত নয়, তবে যদি এটি ঘটে তবে এটি একবারে তাদেরকে মুক্তি দেওয়ার পরামর্শ দেয় (ধীর তবে আরও নির্ভরযোগ্য বলে মনে হয়)।... বা ... এমন কমিটসগুলির জন্য যা ইতিমধ্যে ঠেলাঠেলি করা হয়েছে:
এই উত্তরের পদক্ষেপগুলি অনুসরণ করুন , যা উপরের মত একই, তবে git push origin <branch> -f
শাখাটি জোর করে চাপানোর জন্য কমান্ড লাইন ( ) থেকে চালানোর জন্য আরও একটি কমান্ডের প্রয়োজন । আমি এটি সব পড়ার এবং প্রয়োজনীয় সতর্কতা প্রয়োগের সুপারিশ করব!
আপনি যদি সর্বশেষতম প্রতিশ্রুতি সম্পাদনা করতে চান তবে ব্যবহার করুন:
git commit --amend
অথবা
git commit --amend -m 'one line message'
তবে আপনি যদি একের পর এক বেশ কয়েকটি কমিট সম্পাদনা করতে চান তবে আপনার পরিবর্তে রিবিসিং ব্যবহার করা উচিত:
git rebase -i <hash of one commit before the wrong commit>
উপরের মত একটি ফাইলে, edit/e
অন্য বিকল্পগুলির মধ্যে একটি বা লিখুন এবং সংরক্ষণ করুন এবং প্রস্থানটি চাপুন।
এখন আপনি প্রথম ভুল প্রতিশ্রুতিতে থাকবেন। ফাইলগুলিতে পরিবর্তন করুন এবং সেগুলি আপনার জন্য স্বয়ংক্রিয়ভাবে মঞ্চস্থ হবে। আদর্শ
git commit --amend
সংরক্ষণ করুন এবং প্রস্থান করুন এবং টাইপ করুন
git rebase --continue
আপনার সমস্ত পছন্দগুলি শেষ না হওয়া পর্যন্ত পরবর্তী নির্বাচনের দিকে যেতে।
দ্রষ্টব্য যে এই বিষয়গুলি সেই বিশেষ অঙ্গীকারের পরে আপনার সমস্ত SHA হ্যাশগুলিকে পরিবর্তন করে।
আপনি ব্যবহার করা উচিত আপনি শুধুমাত্র আপনার শেষ বার্তা পরিবর্তন করতে চান --only
পতাকা বা তার শর্টকাট -o
দিয়ে commit --amend
:
git commit --amend -o -m "New commit message"
এটি নিশ্চিত করে যে আপনি দুর্ঘটনাক্রমে স্টেজ স্টাফগুলির সাথে আপনার প্রতিশ্রুতি বাড়িয়ে তুলবেন না। অবশ্যই একটি সঠিক $EDITOR
কনফিগারেশন থাকা ভাল। তারপরে আপনি -m
বিকল্পটি ছেড়ে দিতে পারেন , এবং গিট পুরানোটির সাথে প্রতিশ্রুতি বার্তাটি পূর্বে পূরণ করবে। এইভাবে এটি সহজেই সম্পাদনা করা যায়।
git commit --amend
। প্রশ্নটি খুব নির্দিষ্ট, তাই দীর্ঘতর! = আরও ভাল। -o
পতাকাটির নির্ধারিত উল্লেখ সম্ভবত অন্যান্য তথ্যের মধ্যে সমাধিস্থ করা হবে। ইতিমধ্যে অনেক ভোট রয়েছে এমন উত্তরে আমি সম্পাদনা করতেও স্বাচ্ছন্দ্য বোধ করি না।
--only
সাথে বিকল্পটি --amend
পাওয়া যায় এটি 1.7.11.3 ( ea2d4ed35902ce15959965ab86d80527731a177c ) এ স্থির না হওয়া পর্যন্ত এটি সঠিকভাবে কাজ করে না । তাই 2008 সালে সঠিক উত্তর ফিরে সম্ভবত ভালো কিছু হত: git stash; git commit --amend; git stash pop
।
আপনার নতুন ভুল প্রতিশ্রুতি বার্তাটি একটি নতুন লাইনে নতুন প্রতিশ্রুতি বার্তাটি আপডেট করুন:
git commit --amend -m "your new commit message"
বা, নীচের মত গিট রিসেট চেষ্টা করুন:
# You can reset your head to n number of commit
# NOT a good idea for changing last commit message,
# but you can get an idea to split commit into multiple commits
git reset --soft HEAD^
# It will reset you last commit. Now, you
# can re-commit it with new commit message.
git reset
আপনাকে একাধিক অঙ্গীকারের প্রতিশ্রুতি ভঙ্গ করতেও সহায়তা করতে পারে:
# Reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (You can reset multiple commit by doing HEAD~2(no. of commits)
# Now, reset your head for splitting it to multiple commits
git reset HEAD
# Add and commit your files separately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"
git add config/
git commit -m "add all files in config directory"
এখানে আপনি সফলভাবে দুটি প্রতিশ্রুতিতে আপনার শেষ প্রতিশ্রুতি ভঙ্গ করেছেন।
git commit --amend
, ঠিক মত কিভাবে এটি বলেছেন শীর্ষ উত্তর ভোট দিয়েছেন । তদ্ব্যতীত, এই আগের উত্তরেgit reset --soft HEAD^
নরম পুনরায় সেট করার জন্য অভিন্নভাবে কাজ করে , কারণ তারা উভয়ই প্রথম পিতামাতার প্রতিশ্রুতিতে পুনরায় সেট হয়।
git reset
সমাধানের সাথে যুক্ত করতে বিরক্ত করি কেবল একটি প্রতিশ্রুতি বার্তাটিকে একাধিক কমিট বার্তায় বিভক্ত করার একটি ধারণা দিতে। কারণ, যখন আমি ব্যবহার শুরু করছিলাম তখন আমি এই সমস্যার মুখোমুখি হয়েছি git
। কখনও কখনও, এটি সত্যিই সহায়ক হতে পারে। :)
এই প্রশ্নে প্রচুর উত্তর রয়েছে, তবে তাদের মধ্যে কেউই কীভাবে ভিম ব্যবহার করে পুরানো প্রতিশ্রুতি বার্তাগুলি পরিবর্তন করতে হয় তা বিশদভাবে ব্যাখ্যা করে না । আমি নিজেই এটি করার চেষ্টা করতে গিয়ে আটকে গিয়েছিলাম, তাই এখানে আমি বিশেষত ভিমের অভিজ্ঞতা নেই এমন লোকদের জন্য কীভাবে আমি এটি করেছি তা বিশদে লিখব!
আমি আমার পাঁচটি সর্বশেষ প্রতিশ্রুতি পরিবর্তন করতে চেয়েছিলাম যা আমি ইতিমধ্যে সার্ভারে চাপিয়ে দিয়েছি। এটি বেশ 'বিপজ্জনক' কারণ কারণ ইতিমধ্যে অন্য কেউ যদি এ থেকে টানেন তবে আপনি প্রতিশ্রুতি বার্তাগুলি পরিবর্তন করে জিনিসগুলিকে গোলমাল করতে পারেন। তবে, আপনি যখন নিজের সামান্য শাখায় কাজ করছেন এবং নিশ্চিত হন যে কেউ এটিকে টানছেন না আপনি এটিকে এটি পরিবর্তন করতে পারবেন:
ধরা যাক আপনি আপনার সর্বশেষ পাঁচটি কমিট পরিবর্তন করতে চান এবং তারপরে আপনি এটি টার্মিনালে টাইপ করুন:
git rebase -i HEAD~5
* যেখানে আপনি পরিবর্তন করতে চান এমন প্রতিশ্রুত বার্তাগুলির সংখ্যা হ'ল 5 (তাই যদি আপনি দশমকে শেষ প্রতিশ্রুতিতে পরিবর্তন করতে চান তবে আপনি 10 তে টাইপ করুন)।
এই কমান্ডটি আপনাকে ভিমে নিয়ে যাবে সেখানে আপনি আপনার সম্পাদনার ইতিহাস 'সম্পাদনা' করতে পারবেন। আপনি আপনার শেষ পাঁচটি কমিটগুলি শীর্ষে দেখতে পাবেন:
pick <commit hash> commit message
পরিবর্তে pick
আপনার লিখতে হবে reword
। আপনি টাইপ করে ভিমে এটি করতে পারেন i
। এটি আপনাকে সন্নিবেশ মোডে যেতে দেয় । (আপনি দেখতে পাচ্ছেন যে আপনি নীচে INSERT শব্দটি দ্বারা সন্নিবেশ মোডে রয়েছেন)) আপনি যে কমিটগুলি পরিবর্তন করতে চান reword
তার পরিবর্তে টাইপ করুনpick
।
তারপরে আপনাকে এই স্ক্রিনটি সংরক্ষণ এবং প্রস্থান করা দরকার। আপনি প্রথমে Escবোতাম টিপে 'কমান্ড-মোডে' গিয়ে ( নীচের অংশে INSERT শব্দটি অদৃশ্য হয়ে গেলে আপনি কমান্ড-মোডে আছেন কিনা তা পরীক্ষা করতে পারেন) do তারপরে আপনি টাইপ করে একটি কমান্ড টাইপ করতে পারেন :
। সংরক্ষণ এবং প্রস্থান করার আদেশটি হ'ল wq
। সুতরাং আপনি যদি টাইপ করেন তবে আপনি :wq
সঠিক পথে রয়েছেন।
তারপরে ভিম আপনি প্রতিশ্রুতিবদ্ধ করতে চাইলে প্রতি প্রতিশ্রুতি বার্তাটি নিয়ে যাবে এবং আপনি এখানে প্রতিশ্রুতি বার্তা পরিবর্তন করতে পারেন। আপনি এটি সন্নিবেশ মোডে গিয়ে, প্রতিশ্রুতি বার্তা পরিবর্তন করে, কমান্ড-মোডে গিয়ে সংরক্ষণ এবং প্রস্থান করে যাবেন। এটি পাঁচবার করুন এবং আপনি ভিমের বাইরে রয়েছেন!
তারপরে, আপনি যদি ইতিমধ্যে আপনার ভুল প্রতিশ্রুতিগুলি ধাক্কা দিয়ে থাকেন তবে git push --force
সেগুলি ওভাররাইট করা আপনার দরকার । মনে রাখবেন যে git push --force
এটি করা বেশ বিপজ্জনক জিনিস, সুতরাং আপনার ভুল প্রতিশ্রুতি দেওয়ার কারণে সার্ভার থেকে কেউ টানছেন না তা নিশ্চিত হয়ে নিন!
এখন আপনি আপনার প্রতিশ্রুতি বার্তা পরিবর্তন করেছেন!
(যেমন আপনি দেখতে পাচ্ছেন, আমি ভিমে তেমন অভিজ্ঞ নই, তাই কী ঘটছে তা বোঝাতে যদি আমি 'লিঙ্গো' ব্যবহার করি, তবে আমাকে সংশোধন করতে দ্বিধা বোধ করুন!)
<nitpick>
স্ট্যাক ওভারফ্লোতে কোনও "থ্রেড" নেই, কারণ এটি কোনও আলোচনা ফোরাম নয়, কেবলমাত্র "প্রশ্ন", "উত্তর" এবং "পোস্ট" রয়েছে are </nitpick>
। এছাড়াও, ভিমের সমস্ত সংস্করণ এক নয়, এগুলির সবগুলিই আপনাকে সন্নিবেশ মোডে অক্ষরগুলি মুছে ফেলতে দেবে না (একরকমভাবে বোঝায়, ডান?) আপনি যদি সবসময় ভিমে অক্ষর মুছতে সক্ষম হন X
এবং এটি x
করতে চান তবে ( x
কার্সারের সামান্য অক্ষর মুছে ফেলা X
হবে , পিছনে মুছবে)। আপনি যদি ভুল u
করে থাকেন তবে আপনি পূর্বাবস্থায় ফিরে আসতে ব্যবহার করতে পারেন use অবশেষে, ইন্টারেক্টিভ রিবেস সম্পাদকটির r
জন্য শর্টহ্যান্ড reword
।
cw
তার শুরুতে টাইপ করা হয় (যদিও প্রশ্নটি ভিম সম্পর্কে নয়, আমি সম্মত)।
nano
এডিটরটিকে বুদ্ধিমান এবং ব্যবহারকারী-বান্ধব কিছু, যেমন মিড মিডনাইট কমান্ডারের ম্যাসিট হিসাবে সেট করতে পারেন ।
আপনি গিট-রিবেস-রিওয়ার্ড ব্যবহার করতে পারেন
এটি কোনও প্রতিশ্রুতি (কেবল শেষ নয়) একইভাবে সম্পাদনা করার জন্য ডিজাইন করা হয়েছে commit --amend
$ git rebase-reword <commit-or-refname>
একটি প্রতিশ্রুতি সংশোধন করতে রিবেস ইন্টারেক্টিভের ক্রিয়া অনুসারে এর নামকরণ করা হয়েছে: "পুনর্নির্বাচন"। এই পোস্টটি দেখুন এবং ম্যান- সেকশন ইন্টারেক্টিভ মোড-
উদাহরণ:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
g c; g rb -i @~9
(কমিট এবং রি-বেসের ফলে), সরাতে নতুন যেখানে আমি এটি করতে চান কমিট, পরিবর্তন commit
করার জন্য f
( fixup
), এবং সংরক্ষণ করুন। আপনি যদি এর চেয়ে দ্রুত কিছু পেতে চান তবে আপনি git commit --fixup=<commit>; git rebase -i --autosquash <commit>^
আমি এলিয়াস reci
এবং এর recm
জন্য যুক্ত recommit (amend)
করেছি। এখন আমি এটি দিয়ে git recm
বা এটি করতে পারি git recm -m
:
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
আমি বুঝতে পেরেছিলাম যে আমি এতে একটি টাইপো দিয়ে প্রতিশ্রুতিবদ্ধ করেছি। পূর্বাবস্থায় ফেলার জন্য, আমি নিম্নলিখিতগুলি করেছি:
git commit --amend -m "T-1000, advanced prototype"
git push --force
সতর্কতা: আপনার পরিবর্তনগুলি ধাক্কা দিয়ে বল আপনার স্থানীয় সাথে দূরবর্তী শাখাকে ওভাররাইট করে। নিশ্চিত করুন যে আপনি যে কোনও কিছু রাখতে চান তা ওভাররাইট করা হচ্ছে না। অন্য কেউ যদি আপনার সাথে শাখাটি ভাগ করে নেয় তবে সংশোধিত (পুনর্লিখন) প্রতিশ্রুতিবদ্ধ বলের দিকে চাপ দেওয়ার বিষয়েও সতর্ক থাকুন, কারণ আপনি যে পুনরায় লিখেছেন সে প্রতিশ্রুতিটির পুরাতন অনুলিপি থাকলে তাদের নিজস্ব ইতিহাস পুনরায় লেখার প্রয়োজন হবে।
আমি নিম্নলিখিত ব্যবহার করতে চান:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
যদি আপনি কোডটি আপনার দূরবর্তী শাখায় ( গিটহাব / বিটবকেট ) না ঠেলে থাকেন তবে আপনি নীচের মতো কমান্ড লাইনে প্রতিশ্রুতি বার্তাটি পরিবর্তন করতে পারেন।
git commit --amend -m "Your new message"
আপনি যদি একটি নির্দিষ্ট শাখায় কাজ করছেন তবে এটি করুন:
git commit --amend -m "BRANCH-NAME: new message"
আপনি যদি ইতিমধ্যে ভুল বার্তাটি দিয়ে কোডটি ঠেলে দিয়ে থাকেন, এবং বার্তাটি পরিবর্তন করার সময় আপনার সতর্কতা অবলম্বন করা উচিত। এটি হ'ল, আপনি প্রতিশ্রুতি বার্তা পরিবর্তন করার পরে এবং এটি আবার চাপ দেওয়ার চেষ্টা করার পরে আপনি সমস্যাটি শেষ করবেন। এটিকে মসৃণ করতে, এই পদক্ষেপগুলি অনুসরণ করুন।
আমার সম্পূর্ণ উত্তরটি করার আগে দয়া করে পড়ুন।
git commit --amend -m "BRANCH-NAME : your new message"
git push -f origin BRANCH-NAME # Not a best practice. Read below why?
গুরুত্বপূর্ণ দ্রষ্টব্য: আপনি যখন ফোর্স ধাক্কা সরাসরি ব্যবহার করেন তখন আপনি অন্য কোনও বিকাশকারী একই শাখায় কাজ করছেন এমন কোড সংক্রান্ত সমস্যা শেষ হতে পারে। সুতরাং যারা দ্বন্দ্ব এড়াতে, আপনি আগে আপনার শাখা থেকে কোড টান প্রয়োজন বল ধাক্কা :
git commit --amend -m "BRANCH-NAME : your new message"
git pull origin BRANCH-NAME
git push -f origin BRANCH-NAME
প্রতিশ্রুতি বার্তা পরিবর্তন করার সময় এটি সর্বোত্তম অনুশীলন, যদি এটি ইতিমধ্যে ধাক্কা দেওয়া হয়।