হালনাগাদ
আমি একটি উপনাম তৈরি করেছি git squash-all
।
উদাহরণ ব্যবহার : git squash-all "a brand new start"
।
[alias]
squash-all = "!f(){ git reset $(git commit-tree HEAD^{tree} -m \"${1:-A new start}\");};f"
সাবধানতা : একটি মন্তব্য প্রদান মনে রাখবেন, অন্যথায় ডিফল্ট প্রতিশ্রুতি বার্তা "একটি নতুন শুরু" ব্যবহৃত হবে।
অথবা আপনি নিম্নলিখিত কমান্ডের সাহায্যে উপন্যাসটি তৈরি করতে পারেন:
git config --global alias.squash-all '!f(){ git reset $(git commit-tree HEAD^{tree} -m "${1:-A new start}");};f'
এক রৈখিক
git reset $(git commit-tree HEAD^{tree} -m "A new start")
দ্রষ্টব্য : এখানে " A new start
" একটি উদাহরণ, নিজের ভাষা ব্যবহার করতে নির্দ্বিধায়।
টি এল; ডিআর
স্কোয়াশ করার দরকার নেই, git commit-tree
এতিম কমিট তৈরি করতে ব্যবহার করুন এবং এটির সাথে চলুন।
ব্যাখ্যা করা
মাধ্যমে একটি একক প্রতিশ্রুতি তৈরি করুন git commit-tree
কি git commit-tree HEAD^{tree} -m "A new start"
করে:
সরবরাহ করা ট্রি অবজেক্টের উপর ভিত্তি করে একটি নতুন কমিট অবজেক্ট তৈরি করে এবং stdout এ নতুন কমিট অবজেক্ট আইডি নির্গত করে। লগ বার্তাটি স্ট্যান্ডার্ড ইনপুট থেকে পঠিত হয়, যদি না -m বা -F বিকল্পগুলি দেওয়া না হয়।
অভিব্যক্তিটির HEAD^{tree}
অর্থ গাছের বস্তু সম্পর্কিত HEAD
যা আপনার বর্তমান শাখার ডগা। দেখতে বৃক্ষ-অবজেক্টস এবং কমিট-অবজেক্টস ।
নতুন শাখাতে বর্তমান শাখাটি পুনরায় সেট করুন
তারপরে git reset
কেবল নতুন তৈরি করা কমিট অবজেক্টে বর্তমান শাখাটি পুনরায় সেট করুন।
এইভাবে, কর্মক্ষেত্রের কোনও কিছুই স্পর্শ করা হয়নি, বা পুনর্বাস / স্কোয়াশের কোনও প্রয়োজন নেই, যা এটি সত্যই দ্রুত করে তোলে। এবং প্রয়োজনীয় সময়টি সংগ্রহস্থলের আকার বা ইতিহাসের গভীরতার সাথে অপ্রাসঙ্গিক।
প্রকরণ: একটি প্রকল্প টেম্পলেট থেকে নতুন রেপো
টেমপ্লেট / আরচাইটিপ / বীজ / কঙ্কাল হিসাবে অন্য সংগ্রহস্থল ব্যবহার করে নতুন প্রকল্পে "প্রাথমিক প্রতিশ্রুতি" তৈরি করতে এটি দরকারী। উদাহরণ স্বরূপ:
cd my-new-project
git init
git fetch --depth=1 -n https://github.com/toolbear/panda.git
git reset --hard $(git commit-tree FETCH_HEAD^{tree} -m "initial commit")
এটি টেম্পলেট রেপোকে দূরবর্তী ( origin
বা অন্যথায়) হিসাবে যুক্ত করা এড়িয়ে যায় এবং আপনার প্রাথমিক প্রতিশ্রুতিতে টেম্পলেট রেপোর ইতিহাসকে ধসে পড়ে।