git - কিভাবে বিদ্যমান পরিবর্তন, unpushed commits?




git-commit git-rewrite-history amend (23)

সাম্প্রতিক কমিটির বার্তা সংশোধন করা হচ্ছে

git commit --amend

আপনার সম্পাদকটি খুলবে, যা আপনাকে সাম্প্রতিক কমিটির প্রতিশ্রুতি বার্তা পরিবর্তন করার অনুমতি দেবে। অতিরিক্তভাবে, আপনি কমান্ড লাইন সরাসরি কমান্ড লাইনে সেট করতে পারেন:

git commit --amend -m "New commit message"

... তবে, এটি মাল্টি-লাইনকে বার্তা বা ছোট সংশোধনগুলি প্রবেশ করতে আরো জটিল করে তুলতে পারে।

এই কাজ করার আগে আপনি যে কোনও কার্যকরী অনুলিপি পরিবর্তন না করে নিশ্চিত হন বা তারাও প্রতিশ্রুতিবদ্ধ হবে। ( Unstaged পরিবর্তন প্রতিশ্রুতিবদ্ধ হবে না।)

আপনি ইতিমধ্যে আপনার রিমোট শাখা থেকে push করা হয়েছে যে একটি কমিটির বার্তা পরিবর্তন

আপনি যদি ইতিমধ্যে আপনার রিমোট শাখাতে আপন আপন আপত্তিজনক পদক্ষেপটি ধাক্কা দিচ্ছেন, তবে আপনাকে এই সাথে সংঘটিত ধাক্কা জোরদার করতে হবে:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

সতর্কতা: ফোর্স-পেষিং আপনার দূরবর্তী অবস্থার সাথে দূরবর্তী শাখাকে ওভাররাইট করবে । যদি আপনার স্থানীয় শাখাটিতে নেই এমন রিমোট শাখায় এমন কিছু থাকে তবে আপনি সেইগুলি হারাবেন।

সাবধানবাণী: আপনি অন্যদের সাথে ইতিমধ্যে ভাগ করে নেওয়ার কৃতিত্বগুলি সংশোধন করার বিষয়ে সতর্ক হোন। সংশোধনীগুলি অবশ্যই তাদের বিভিন্ন SHA আইডিগুলি পুনর্বিবেচনা করে, যা অন্য কোনও ব্যক্তিদের পুনর্বিবেচনা করা পুরানো কমিটির কপিগুলির একটি সমস্যা তৈরি করে। পুরোনো কমিটির একটি অনুলিপি থাকা আপনার নতুন পুনঃ-লিখিত কমিটির সাথে তাদের কাজটি সিঙ্ক্রোনাইজ করতে হবে, যা কখনও কখনও কঠিন হতে পারে, তাই ভাগ করে নেওয়ার ইতিহাসটি পুনর্বিবেচনা করার চেষ্টা করার সময় আপনি অন্যদের সাথে সমন্বয় নিশ্চিত করুন বা কেবল ভাগ করা কপিরাইটগুলি পুনরায় লিখতে ভুলবেন না পুরাপুরি।

ইন্টারেক্টিভ রিবেস ব্যবহার করুন

আরেকটি বিকল্প ইন্টারেক্টিভ রিবেস ব্যবহার করা হয়।
এটি আপনাকে সর্বশেষ বার্তা না থাকলেও আপনি যে বার্তাটি আপডেট করতে চান তা সম্পাদনা করতে পারবেন।

একটি গিট স্কোয়াশ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X

একবার আপনি আপনার commits squash - বার্তা সম্পাদনা করার জন্য e/r নির্বাচন করুন

ইন্টারেক্টিভ রিবেস সম্পর্কে গুরুত্বপূর্ণ নোট

যখন আপনি git rebase -i HEAD~X ব্যবহার git rebase -i HEAD~X X বেশি হতে পারে। গিট শেষ X টিতে সমস্ত কৃতিত্ব "সংগ্রহ" করবে এবং যদি সেই সীমাটির মধ্যে কোথাও কোনও মার্জ থাকে তবে আপনি সমস্ত মতামত দেখতে পাবেন যাতে ফলাফল X + হবে।

ভালো পরামর্শ:

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

🔥 হট টিপ

আপনি শেষ git commit বার্তা সংশোধন করতে এবং দূরবর্তীতে এটি ধাক্কা দিতে একটি ছোট bash ফাংশনও লিখতে পারেন। আমাকে সব সময় সাহায্য করে। এখানে ফাংশন; আপনার .bashrc বা অনুরূপ। .zshrc ফাইলে রাখুন এবং আপনার শেল পুনরায় লোড করুন।

# Amend the last commit message
# Push the changes to remote by force
# USAGE: gamend "Your New Commit Msg"
function gamend() {
    git commit --amend -m "[email protected]"
    git push --force
}

নথিপত্র

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

আমি কিভাবে বার্তা প্রেরণ / ফাইল পরিবর্তন করতে পারি? কমিটি এখনও ধাক্কা না করা হয়েছে।


এটি যদি আপনার শেষ অঙ্গীকার, তবে কেবল কমিটিটি সংশোধন করুন:

git commit --amend -o -m "New commit message"

( -o ( --only ) পতাকাটি ব্যবহার করে নিশ্চিত করুন যে আপনি শুধুমাত্র প্রেরণ বার্তাটি পরিবর্তন করুন)


এটি একটি কবর কমিটি, সন্ত্রস্ত ইন্টারেক্টিভ রিবেস ব্যবহার করুন:

git rebase -i @~9   # Show the last 9 commits in a text editor

আপনি চান reword খুঁজুন, r ( reword ) চয়ন করুন, এবং ফাইল সংরক্ষণ এবং বন্ধ করুন। সম্পন্ন!


Miniature ভিম টিউটোরিয়াল (অথবা, কিভাবে শুধুমাত্র 8 keystrokes 3j r Esc ZZ সঙ্গে রিবেস):

  • আপনি সময় আছে vimtutor চালান
  • h j k l আন্দোলন কী অনুরূপ ← ← ^
  • সমস্ত কমান্ড একটি "পরিসীমা" দিয়ে prefixed করা যেতে পারে, উদাহরণস্বরূপ 3j নিচে 3 লাইন নিচে
  • i সন্নিবেশ মোডে প্রবেশ করতে - আপনার টাইপ করা পাঠ্যটি ফাইলটিতে উপস্থিত হবে
  • সন্নিবেশ মোড থেকে প্রস্থান করতে এবং "স্বাভাবিক" মোডে ফিরে এস এস c বা Ctrl c
  • আপনি পূর্বাবস্থায় ফিরিয়ে আনুন
  • Ctrl r পুনরায় করতে
  • dd , dw , dl যথাক্রমে একটি লাইন, শব্দ বা অক্ষর মুছে ফেলতে
  • cc , cw , cl যথাক্রমে একটি লাইন, শব্দ, বা অক্ষর পরিবর্তন ( dd i হিসাবে একই)
  • yy , yw , yl অনুলিপি করার জন্য ("yank") একটি লাইন, শব্দ বা অক্ষর
  • p বা P যথাক্রমে, পরে বা বর্তমান অবস্থান, পরে পেস্ট
  • :w একটি ফাইল সংরক্ষণ (লিখুন) লিখুন
  • :q! সংরক্ষণ ছাড়া প্রস্থান করুন
  • :wq এন্টার বা ZZ সংরক্ষণ এবং প্রস্থান করুন

আপনি যদি অনেক পাঠ্য সম্পাদনা করেন, তবে ডিভোরাক কীবোর্ড বিন্যাসে স্যুইচ করুন, স্পর্শ-টাইপ শিখুন এবং শিখুন শিখুন। এটা কি মূল্যবান? হ্যাঁ।


ProTip ™: ইতিহাসকে পুনর্বিবেচনা করতে "বিপজ্জনক" কমান্ডগুলির সাথে পরীক্ষা করতে ভয় পাবেন না * - Git ডিফল্টভাবে 90 দিনের জন্য আপনার মতামত মুছবে না; আপনি রিফ্লগ তাদের খুঁজে পেতে পারেন:

$ git reset @~3   # go back 3 commits
$ git reflog
c4f708b [email protected]{0}: reset: moving to @~3
2c52489 [email protected]{1}: commit: more changes
4a5246d [email protected]{2}: commit: make important changes
e8571e4 [email protected]{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started

* বিকল্পগুলি যেমন - --hard এবং --force যদিও বিকল্পগুলির জন্য দেখুন - তারা তথ্য বাতিল করতে পারে।
* এছাড়াও, আপনি যে কোনও শাখাগুলিতে সহযোগিতা করছেন ইতিহাসে পুনর্লিখন করবেন না।


ব্যবহার

git commit --amend

বিস্তারিতভাবে বুঝতে, একটি চমৎকার পোস্ট 4. গিট ইতিহাস পুনর্বিবেচনারgit commit --amend ব্যবহার না করার সময় এটি সম্পর্কে আলোচনা - git commit --amend


আপনি যদি জিআইটি GUI টুলটি ব্যবহার করেন তবে শেষ কমিট সংশোধনের নামে একটি বোতাম রয়েছে। যে বাটন ক্লিক করুন এবং তারপর এটি আপনার শেষ কমিট ফাইল এবং বার্তা প্রদর্শন করা হবে। শুধু সেই বার্তাটি সম্পাদনা করুন এবং আপনি এটি নতুন প্রতিশ্রুতি বার্তা সহ প্রেরণ করতে পারেন।

অথবা কনসোল / টার্মিনাল থেকে এই কমান্ড ব্যবহার করুন:

git commit -a --amend -m "My new commit message"

ইতিমধ্যে উল্লিখিত হিসাবে, git commit --amend শেষ কমিট overwrite উপায়। এক নোট: যদি আপনি ফাইলগুলি ওভাররাইট করতে চান তবে কমান্ডটি হ'ল

git commit -a --amend -m "My new commit message"

এই প্রশ্নে অনেকগুলি উত্তর রয়েছে কিন্তু ভিআইএম ব্যবহার করে পুরানো প্রতিশ্রুতি বার্তাগুলি কীভাবে পরিবর্তন করবেন তা বিস্তারিতভাবে ব্যাখ্যা করে না। আমি নিজেকে এই কাজ করার জন্য আটকে ছিলাম, তাই এখানে আমি বিস্তারিতভাবে লিখব কিভাবে আমি এটি বিশেষ করে তাদের জন্য যারা ভিআইমে কোন অভিজ্ঞতা নেই!

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

ধরুন আপনি আপনার পাঁচটি সর্বশেষ কাজগুলি পরিবর্তন করতে চান, তাহলে আপনি এটি টার্মিনালে টাইপ করুন:

git rebase -i HEAD~5 * যেখানে 5 টি বার্তা প্রেরণ করতে চান যা আপনি পরিবর্তন করতে চান। (তাই যদি আপনি 10 ম পরিবর্তন করতে চান তবে শেষ টাইমটি 10 ​​টাইপ করুন)

এই কমান্ডটি আপনাকে ভিআইএম-এ নিয়ে যাবে যেখানে আপনি আপনার কমিটির ইতিহাস সম্পাদনা করতে পারেন। আপনি শীর্ষে আপনার শেষ 5 টিটি দেখতে পাবেন:

pick <commit hash> commit message

পরিবর্তে আপনি লিখুন লিখুন প্রয়োজন। আপনি আইএম টাইপ করে ভিআইএম এ এটি করতে পারেন, যা আপনাকে ইনসার্ট-মোডে যেতে দেয়। (আপনি নীচে INSERT শব্দটি দিয়ে সন্নিবেশ মোডে আছেন তা দেখেন) আপনি এই পরিবর্তনের জন্য পরিবর্তনের পরিবর্তে শব্দ পরিবর্তন করতে চান

তারপরে আপনাকে এই স্ক্রিনটি সংরক্ষণ এবং ছেড়ে দিতে হবে, আপনি প্রথমে এসসি বাটন টিপে 'কমান্ড মোড' এ যান। (আপনি কমান্ড-মোডে আছেন কিনা তা পরীক্ষা করতে পারেন যদি নীচের অংশে INSERT শব্দটি অদৃশ্য হয়ে যায়) তারপর আপনি টাইপ করে একটি কমান্ড টাইপ করতে পারেন wq সংরক্ষণ এবং প্রস্থান করার কমান্ড wq । সুতরাং যদি আপনি টাইপ করুন :wq আপনি সঠিক তিনি ট্র্যাক করছি।

তারপরে ভিআইএম আপনি যে প্রতিমূর্তি পুনঃব্যবহার করতে চান তার উপরে যান, এখানে আপনি আসলে বার্তা প্রেরণ করতে পারেন। আপনি INSERT মোডে গিয়ে, প্রেরণ বার্তাটি পরিবর্তন করে, কমান্ড-মোডে গিয়ে এবং সংরক্ষণ এবং প্রস্থান করে এটি করবেন। এই 5 বার করুন এবং আপনি ভিআইএম আউট!

তারপরে, যদি আপনি ইতিমধ্যেই আপনার ভুল git push --force আপনাকে git push --force ওভাররাইট করার জন্য git push --force হবে। মনে রাখবেন যে git push --force কাজটি বেশ বিপজ্জনক ব্যাপার, সুতরাং আপনার ভুল git push --force পরে সার্ভার থেকে কেউ টেনে নিল না তা নিশ্চিত করুন!

এখন আপনি আপনার প্রতিশ্রুতি বার্তা পরিবর্তন করেছেন!

(যেমন আপনি দেখেন আমি ভিআইএম তে অভিজ্ঞ নই, তাই যদি আমি কী ঘটতেছি তা ব্যাখ্যা করতে ভুল 'লিংগো' ব্যবহার করি, তাহলে আমাকে সংশোধন করতে বিনা দ্বিধায়!)


আপনি git-rebase-reword ব্যবহার করতে পারেনgit-rebase-reword

এটি কোন কমিটি (শুধু শেষ নয়) সম্পাদনা করার জন্য ডিজাইন করা হয়েছে commit --amend

$ git rebase-reword <commit-or-refname>

এটি একটি কমিট সংশোধন করার জন্য ইন্টারেক্টিভ রিবেস উপর কর্মের পরে নামকরণ করা হয়: "reword"। এই পোস্টটি দেখুন এবং man সেকশন ইন্টারেক্টিভ মোড-

উদাহরণ:

$ git rebase-reword b68f560
$ git rebase-reword HEAD^

যদি আপনাকে একাধিক শাখাগুলিতে একটি পুরানো কমিটির বার্তা পরিবর্তন করতে হয় (অর্থাত্ ভুল বার্তা সহ কমিটটি একাধিক শাখাগুলিতে উপস্থিত থাকে) তাহলে আপনি এটি ব্যবহার করতে পারেন:

git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all

Git পুনর্লিখনের জন্য একটি অস্থায়ী ডিরেক্টরি তৈরি করবে এবং অতিরিক্তভাবে রেফারেন্স refs/original/ পুরানো refs/original/ ব্যাকআপ করবে।

  • -f অপারেশন কার্যকর করা হবে। অস্থায়ী ডিরেক্টরি ইতিমধ্যে উপস্থিত থাকলে এটির প্রয়োজন হয় অথবা যদি রেফারেন্স refs/original অধীনে ইতিমধ্যে সংরক্ষিত রেফারেন্স থাকে। যদি এমন হয় না তবে আপনি এই পতাকাটি ছেড়ে দিতে পারেন।

  • -- সংশোধন বিকল্প থেকে ফিল্টার-শাখা অপশন আলাদা।

  • --all সব নিশ্চিত করা হবে, যে সব শাখা এবং ট্যাগ পুনরায় লেখা হয়।

আপনার পুরানো রেফারেন্সের ব্যাকআপের কারণে, কমান্ড কার্যকর করার আগে আপনি সহজেই রাষ্ট্রটিতে ফিরে যেতে পারেন।

বলুন, আপনি আপনার মাস্টার পুনরুদ্ধার করতে চান এবং শাখা old_master এটি অ্যাক্সেস করতে চান:

git checkout -b old_master refs/original/refs/heads/master

আমি ওরফে যোগ করেছেন reci, recmএর জন্য recommit (amend)এটা এখন আমি এটা দিয়ে কি করতে পারেন git recmবা git recm -m

$ vim ~/.gitconfig

[alias]

    ......
    cm = commit
    reci = commit --amend
    recm = commit --amend
    ......

আপনি যে জন্য গিট filter-branch ব্যবহার করতে পারেন।

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

এটি একটি তুচ্ছ git commit --amend হিসাবে সহজ নয় - git commit --amend , তবে এটি বিশেষত দরকারী, যদি আপনার ইতিমধ্যে ভুল বার্তা পাঠানোর পরে কিছু মার্জ থাকে।

মনে রাখবেন যে এটি HEAD এবং ত্রুটিযুক্ত HEAD মধ্যে প্রতিটি প্রতিশ্রুতি পুনর্লিখন করার চেষ্টা করবে, তাই আপনাকে আপনার msg-filter কমান্ডটি খুব বিজ্ঞাপনে নির্বাচন করতে হবে ;-)


আমি যতটা সম্ভব জিটি জিওআই ব্যবহার করি, এবং এটি আপনাকে শেষ কমিটির সংশোধন করার বিকল্প দেয়:

এছাড়াও, git rebase -i origin/master একটি চমৎকার মন্ত্র যা সর্বদা আপনাকে মাস্টারের শীর্ষস্থানে সম্পন্ন করে উপস্থাপন করে এবং আপনাকে সংশোধন, মুছে ফেলার, পুনর্বিন্যাস বা স্কোয়াশ করার বিকল্প দেয়। প্রথম যে হ্যাশ হোল্ড পেতে কোন প্রয়োজন।


আপনি যদি জিআইটি GUI ব্যবহার করেন তবে আপনি শেষ কমিটটি সংশোধন করতে পারেন যা দিয়ে ধাক্কা দেওয়া হয়নি:

Commit/Amend Last Commit

আমি এই ভাবে পছন্দ।

git commit --amend -c <commit ID>

অন্যথায়, একটি নতুন কমিটির আইডি সঙ্গে একটি নতুন কমিটি হবে


পূর্ববর্তী কমিটির সংশোধন করতে, আপনার যে পরিবর্তনগুলি চান তা করুন এবং সেগুলি পরিবর্তন করুন এবং তারপরে চালান

git commit --amend

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

পূর্ববর্তী কমিটি সংশোধন এবং একই লগ বার্তা রাখা, রান

git commit --amend -C HEAD

সম্পূর্ণরূপে অপসারণ করে পূর্ববর্তী কমিট ঠিক করতে, চালান

git reset --hard HEAD^

আপনি একাধিক কমিটি বার্তা সম্পাদনা করতে চান, চালান

git rebase -i HEAD~commit_count

( Comm_count প্রতিস্থাপন করুন যা আপনি সম্পাদন করতে চান তার সংখ্যা সহ।) এই কমান্ডটি আপনার এডিটরটি চালু করে। "পিক" এর পরিবর্তে "সম্পাদনা" হিসাবে প্রথম কমিটির (আপনি যেটি পরিবর্তন করতে চান) চিহ্নিত করুন, তারপরে সংরক্ষণ করুন এবং আপনার সম্পাদক থেকে প্রস্থান করুন। আপনি পরিবর্তন করতে চান পরিবর্তন করুন এবং তারপর চালানো

git commit --amend
git rebase --continue

দ্রষ্টব্য: আপনি git commit --amend দ্বারা সম্পাদিত সম্পাদক থেকে "আপনি চান এমন পরিবর্তন করুন" করতে পারেন


যে কেউ উইন্ডোজ / ম্যাক জিআইআই খোঁজার জন্য পুরানো বার্তাগুলি সম্পাদনা করতে সহায়তা করবে (অর্থাৎ কেবলমাত্র সর্বশেষ বার্তা নয়), আমি SourceTree কে সুপারিশ করব । অনুসরণ করার ধাপ নীচে।

এখনও রিমোটে push করা হয়েছে যে commits জন্য:

  1. আপনি সমস্ত বর্তমান পরিবর্তনগুলি বা স্ট্যাশ করেছেন তা নিশ্চিত করুন (অর্থাত "ফাইল স্থিতি" ট্যাবের তালিকাভুক্ত কোনও ফাইল নেই) - এটি অন্যথায় কাজ করবে না।
  2. "লগ / ইতিহাস" ট্যাবে, যে অনুচ্ছেদটি আপনি সম্পাদন করতে চান তার নীচের গ্রাফের একটি পাশে থাকা লাইনের সাথে এন্ট্রিটিতে ডান ক্লিক করুন এবং "অন্তর্বর্তীভাবে <commit রেফারেন্স> বাচ্চাদের পুনরায় বাছাই করুন ..." নির্বাচন করুন।
  3. আপনি যে পরিবর্তন বার্তাটি পরিবর্তন করতে চান তার জন্য সমগ্র সারিটি নির্বাচন করুন ( অর্থাত "বার্তা" কলামে ক্লিক করুন )।
  4. "বার্তা সম্পাদনা করুন" বোতামটিতে ক্লিক করুন।
  5. সংলাপে পছন্দসই হিসাবে বার্তাটি সম্পাদনা করুন এবং তারপর ঠিক আছে ক্লিক করুন।
  6. অন্যান্য commit বার্তা পরিবর্তন করতে হলে পদক্ষেপগুলি 3-4 পুনরাবৃত্তি করুন।
  7. ঠিক আছে ক্লিক করুন: Rebasing শুরু হবে। সব ভাল হলে, আউটপুট "সফলভাবে সম্পন্ন" শেষ হবে।

... অথবা ... যা ইতিমধ্যে push করা হয়েছে জন্য:

এই উত্তরের ধাপ গুলো অনুসরণ করুন, যা উপরে অনুরূপ, তবে কমান্ড লাইন থেকে শাখাটি জোরপূর্বক চালানোর জন্য আরও একটি কমান্ড প্রয়োজন - এটি সব পড়ুন এবং প্রয়োজনীয় সতর্কতা প্রয়োগ করুন!


যদি আপনি শুধুমাত্র আপনার শেষ বার্তাটি পরিবর্তন করতে চান তবে আপনাকে কেবলমাত্র পতাকাটি বা তার শর্টকাটটি ব্যবহার করতে হবে - commit --amend -

git commit --amend -o -m "New commit message"

এটি আপনি স্টেজড স্টাফের সাথে আপত্তিজনকভাবে আপনার প্রতিশ্রুতি উন্নত করবেন না তা নিশ্চিত করে। অবশ্যই এটি একটি উপযুক্ত $EDITOR কনফিগারেশন আছে ভাল। তারপরে আপনি -m বিকল্পটি ছেড়ে যেতে পারেন, এবং git পুরানোটির সাথে প্রেরণ বার্তাটি প্রাক-পূরণ করবে। এই ভাবে এটি সহজে সম্পাদনা করা যেতে পারে।


git commit --amend -m "your new message"

আমি নিম্নলিখিত ব্যবহার করতে চান:

  1. git status
  2. git add --all
  3. git commit -am "message goes here about the change"
  4. git pull <origin master>
  5. git push <origin master>

আমি বুঝতে পেরেছি যে আমি এটিকে টাইপো দিয়ে একটি কমিট ধাক্কা দিয়েছি। পূর্বাবস্থায় ফিরিয়ে আনতে, আমি নিম্নলিখিত কাজ করেছিলাম:

git commit --amend -m "T-1000, advanced prototype"
git push --force

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


আপনি যদি সংশোধন করতে চান তবে এটি সাম্প্রতিকতম নয়:

  1. git rebase --interactive $parent_of_flawed_commit

    আপনি যদি কয়েকটি ত্রুটিযুক্ত ত্রুটি সংশোধন করতে চান, তবে তাদের মধ্যেতম প্রাচীনতম পিতা-মাতাকে পাস করুন।

  2. আপনি যা দিয়েছেন তার থেকে সমস্ত সম্পাদক তালিকা সহ একটি সম্পাদক আসবেন।

    1. আপনি যে reword ঠিক করতে চান তার সামনে reword (বা গিটের পুরানো সংস্করণগুলিতে edit ) পরিবর্তন করুন।
    2. একবার আপনি সংরক্ষণ, গিট তালিকাভুক্ত Commutes পুনরায় চালানো হবে।

  3. প্রতিটি কমিটির জন্য আপনি পুনঃব্যবহার করতে চান, গিট আপনাকে আপনার এডিটরটিতে ফিরিয়ে আনবে। প্রতিটি সম্পাদনা করার জন্য আপনি সম্পাদনা করতে চান, গিট আপনাকে শেলের মধ্যে ফেলে দেয়। যদি আপনি শেলে আছেন:

    1. আপনি চান কোন ভাবে পরিবর্তন করুন।
    2. git commit --amend
    3. git rebase --continue

আপনি যেভাবে বিভিন্ন কমান্ডের আউটপুট দ্বারা এই ক্রমটি আপনাকে ব্যাখ্যা করা হবে। এটি খুব সহজ, আপনাকে এটি মনে রাখতে হবে না - মনে রাখবেন যে git rebase --interactive আপনাকে কোনও ব্যাপার না হওয়া পর্যন্ত সেগুলি সংশোধন করতে দেয়।

আপনি ইতিমধ্যে push করা যে পরিবর্তন পরিবর্তন করতে চান না মনে রাখবেন। অথবা হয়ত আপনি করতে পারেন, কিন্তু সেই ক্ষেত্রে আপনাকে তাদের সবার সাথে যোগাযোগ করা এবং তাদের উপরে কাজ করা সবার সাথে যোগাযোগ করার জন্য দুর্দান্ত যত্ন নিতে হবে। কেউ রিবেস বা কোন প্রকাশিত শাখায় রিসেট করার পরে আমি পুনরুদ্ধার / পুনঃসংস্কৃতি কীভাবে করব?


বাহ, তাই এই কাজ করার অনেক উপায় আছে।

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

git reset --soft HEAD~1
git commit -m 'New and corrected commit message'

যদি আমি কোনও ফাইল যুক্ত করতে বা পরিবর্তন করতে ভুলে যাই তবে সর্বদা এটি করি।

--soft পরিবর্তে --soft উল্লেখ করতে --soft না, অন্যথায় আপনি যে সম্পূর্ণরূপে হারান হারান।


আপনি যদি আপনার রিমোট শাখায় ( GitHub / Bitbucket ) Bitbucket ধাক্কা Bitbucket আপনি কমান্ড লাইনে নীচের কমান্ড লাইনটি পরিবর্তন করতে পারেন।

 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

প্রতিশ্রুতি বার্তা পরিবর্তন করার সময় এটি সর্বোত্তম অনুশীলন, যদি এটি ইতিমধ্যে ধাক্কা দেওয়া হয়।


1) একটি নতুন শাখা তৈরি করুন, যা আপনার সমস্ত পরিবর্তন new_branch এ চলে আসে।

git checkout -b new_branch

2) তারপর পুরানো শাখায় ফিরে যান।

git checkout master

3) গিট রিবেস না

git rebase -i <short-hash-of-B-commit>

4) তারপর খোলা সম্পাদক শেষ 3 কমিট তথ্য রয়েছে।

...
pick <C's hash> C
pick <D's hash> D
pick <E's hash> E
...

5) সবগুলো 3 টি drop pick পরিবর্তন করুন। তারপর সম্পাদক সংরক্ষণ করুন এবং বন্ধ।

...
drop <C's hash> C
drop <D's hash> D
drop <E's hash> E
...

6) এখন শেষ 3 টি কমিটি বর্তমান শাখা ( master ) থেকে সরানো হয়। এখন শাখা নাম আগে সাইন + সঙ্গে শাখা ধাক্কা।

git push origin +master




git git-commit git-rewrite-history amend