আমি প্রথম গিট কমিট বার্তাটি কীভাবে উচ্চারণ করব?


116

আমার একটি কার্যনির্বাহী গাছ রয়েছে যার মধ্যে 3 টি কমিট রয়েছে:

~ ~ মাইপ্রজেক্ট গিট: (মাস্টার) git log

commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <my@mail.com>
Date:   Thu Aug 16 00:59:05 2012 +0200

    .gitignore edits

commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <my@mail.com>
Date:   Mon Aug 13 01:36:39 2012 +0200

    Create .gitignore file

commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <my@mail.com>
Date:   Mon Aug 13 01:13:05 2012 +0200

    Initial commit (with a misleading message)

এখন আমি rewordআমার প্রথম প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতিবদ্ধ হতে চাই (6707a66)

~ ~ মাইপ্রজেক্ট গিট: (মাস্টার) git rebase -i 6707

(... ভিমে প্রবেশ করা)

pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits

# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

এই ক্ষেত্রে, আমি ( rewordগিট পার্লেন্সে) প্রশ্নে প্রতিশ্রুতিবদ্ধ বার্তাটি সংশোধন করতে চাই:

প্রাথমিক প্রতিশ্রুতি (একটি বিভ্রান্তিমূলক বার্তা সহ)

... উপযুক্ত কিছু।

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

আমার প্রশ্নের সারসংক্ষেপ, এইভাবে, আপনি এটি করার অন্য কোনও উপায়ে এটি অর্জন করতে পারেন?


অথবা আপনি এটি কেবল সর্বদা সংগ্রহের
ক্রিস্টোফার


True খুব সত্য ... আমি ভেবেছিলাম এই নির্দিষ্ট প্রশ্নের জন্য আমি সঠিকভাবে অনুসন্ধান করেছি তবে এটি আমার মতো। আমার প্রশ্নের কপিরাইটিং নিখুঁত করার এক বিশাল পরিমাণ রয়েছে। :
হেনরিক

1
@ হেসেড: :) আপনার কপিরাইটটি নষ্ট হবে না - এটি ভবিষ্যতে অন্য লোকেদের সমাধান খুঁজে পেতে সহায়তা করবে, এমনকি এটি নকল হিসাবে বন্ধ করাও ছিল
মার্ক লংগায়ার

2
যে কেউ যিনি খুঁজে পেতে পারেন এই প্রশ্নের জুড়ে আসে আমার উত্তর থেকে প্রথম কমিট বাণী পরিবর্তন করা হচ্ছে? (গিট) সহায়ক হতে।

উত্তর:


214

ডু git rebase -i --root

( rootনির্দিষ্ট অঙ্গীকারের দিকে নির্দেশ করার পরিবর্তে নির্দেশ করুন)

এইভাবে, প্রথম প্রতিশ্রুতিবদ্ধও অন্তর্ভুক্ত রয়েছে এবং আপনি rewordএটি অন্য কোনও প্রতিশ্রুতির মতোই করতে পারেন ।

--rootবিকল্প গীত চালু হয় v1.7.12(2012)। তার আগে একমাত্র বিকল্পটি ছিল filter-branchবা --amendযা করা সাধারণত কঠিন।

দ্রষ্টব্য: এই একই প্রশ্ন এবং উত্তর দেখুন


12

আপনি সর্বদা ব্যবহার করতে পারেন git filter-branch --msg-filter:

git filter-branch --msg-filter \
  'test $GIT_COMMIT = '$(git rev-list --reverse master |head -n1)' &&
echo "Nice message" || cat' master

1
কাঁটাচামচ: এটি দুর্দান্ত, ধন্যবাদ কৌতূহলী, আরও ভাল শব্দের অভাবে এটিকে কী "বৈধ" অনুশীলন হিসাবে বিবেচনা করা হবে? মানে, এটি কি সাধারণভাবে করা / সুপারিশ করা উচিত? এছাড়াও, ত্রুটিযুক্ত প্রতিশ্রুতি বার্তাগুলির ক্ষেত্রে আপনি কি এই সময় এবং সময় আবার করতে পারেন? এটি জিজ্ঞাসা করার কারণ এটি যেহেতু আমি প্রথমে ভুল কমিট SHA-1 দিয়েছিলাম, আপনার স্নিপেটটি অনুলিপি করছিলাম (আপনার সর্বশেষ প্রতিশ্রুতি ছিল যেখানে আমি প্রথমটিকে পরিবর্তন করতে চেয়েছিলাম)। কমান্ডটি আরও একবার ব্যবহার করার পরে, এবার সঠিক SHA-1 (প্রথম প্রতিশ্রুতি; 6707a66) দিয়ে, এটি আমার উপর ছড়িয়ে পড়ে।
হেনরিক

ভাল, এটি সাধারণ :) এবং হ্যাঁ, আপনি এটি পুনরাবৃত্তি করতে পারেন। আপনি যদি কেবল যুক্ত করেন তবে -fএটি এগিয়ে যাবে এবং সর্বদা প্রদত্ত শাখার কমিটগুলি পুনরায় লিখবে। refs/original/masterকমান্ডটি চালানোর আগে প্রথম বার থেকে শাখা রেফারেন্স মানটি সংরক্ষণ করা হয়েছিল ।
কাঁটাচামচ

অবশ্যই, আপনি কেবল সংরক্ষিত রেফারেন্সটি মুছে ফেলতে (বা নাম পরিবর্তন) করতে পারেন।
কাঁটাচামচ

2
অনুলিপি আইডি দিয়ে অনুলিপি না ঘটে তা নিশ্চিত করার জন্য আমি কোডটি আপডেট করেছি। এখন কোডটি এমনকি অনুলিপিযোগ্য past সতর্কতার একটি শব্দ , যদিও: একাধিক প্রাথমিক প্রতিশ্রুতি থাকলে (যেমন আপনি দুটি বা আরও বেশি সম্পর্কযুক্ত শাখা মার্জ করার সময় নেই) সঠিকভাবে কাজ করে না
কাঁটাচামচ

3
@ hced: আপনার সচেতন হওয়া উচিত যে "প্রকাশিত ইতিহাস" হিসাবে বিবেচিত যে কোনও প্রতিশ্রুতি পুনর্লিখন করা সাধারণত একটি খারাপ ধারণা। আপনার ক্ষেত্রে, এর অর্থ হ'ল আপনার সাধারণত এটি করা উচিত নয় যদি অন্য কেউ কখনও পূর্বসূর হিসাবে আপনার মূল প্রতিশ্রুতিবদ্ধ এমন কোনও প্রতিশ্রুতিতে কাজ করে থাকেন।
লংগায়ার

12

pcreux এর সংক্ষেপে প্রথম প্রতিশ্রুতিটি পাঠ্যক্রমের একটি ভাল উপায় রয়েছে:

# You can't use rebase -i here since it takes the parent commit as argument.
# You can do the following though:
git checkout FIRST_COMMIT_SHA && git commit --amend && git rebase HEAD master

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