গিট / গিট এক্সটেনশনে "স্কোয়াশ" এবং "ফিক্সআপ" এর মধ্যে পার্থক্য কী?


111

আমি কিছুক্ষণের জন্য গিট এক্সটেনশানগুলি ব্যবহার করছি (এটি দুর্দান্ত!) তবে নীচের কোনও সাধারণ উত্তর আমি পাইনি:

কখনও কখনও, প্রতিশ্রুতি বার্তা টাইপ করার সময় একটি টাইপ করুন। আমার বন্ধুটি আমাকে নিম্নলিখিত পদ্ধতিতে কীভাবে এটি ঠিক করতে হবে তা দেখিয়েছিলেন (গিট এক্সটেনশনে):

কমিট> অ্যাডভান্সড> ফিক্সআপ কমিটটিতে ডান ক্লিক করুন

এখানে চিত্র বর্ণনা লিখুন

তারপরে আমি কেবল "সংশোধন" বাক্সটি পরীক্ষা করে আমার বার্তা এবং ভয়েলা আবার লিখি! আমার প্রতিশ্রুতি বার্তা স্থির।

তবে এই অন্যান্য বিকল্পটি "স্কোয়াশ কমিট" ... আমি সবসময় ভাবছি যে এটি কী করে ?!

আমার প্রশ্নটি হ'ল:

হায় কেউ কেবল আমাকে ব্যাখ্যা মধ্যে সঠিক পার্থক্য কি স্কোয়াশ কমিট এবং ফিক্সআপ কমিট মধ্যে গীত / গীত Extentions ? এগুলি দেখতে আমার কাছে " ... " অনুরূপ : এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

উত্তর:


153

গিট এক্সটেনশানগুলি এটির সাথে বিশেষভাবে কী করে তা আমি জানি না, তবে git rebaseস্কোয়াশের সাথে স্বয়ংক্রিয়ভাবে স্কোয়াশ বা ফিক্সআপ কমিট করার বিকল্প রয়েছে! বা ফিক্সআপ! উপসর্গ যথাক্রমে:

   --autosquash, --no-autosquash
       When the commit log message begins with "squash! ..." (or "fixup!
       ..."), and there is a commit whose title begins with the same ...,
       automatically modify the todo list of rebase -i so that the commit
       marked for squashing comes right after the commit to be modified,
       and change the action of the moved commit from pick to squash (or
       fixup).

স্কোয়াশ এবং ফিক্সআপের মধ্যে পার্থক্য হ'ল রিবেসের সময়, squashঅপারেশন আপনাকে মূল এবং স্কোয়াশ কমিটের বার্তা একত্রিত করার অনুরোধ জানায়, fixupঅপারেশনটি মূল বার্তাটি রাখে এবং ফিক্সআপ কমিট থেকে বার্তাটি বাতিল করে দেয়।


6
গিট ডক্স সম্পর্কে আপনি আরও rebaseস্কোয়াশ / ফিক্সআপ পড়তে পারেন ।

এটি একটি দুর্দান্ত উত্তর। আমি কেন কম্বিনেশন কমিট বার্তা পেয়েছি তা সবসময়ই ভাবতেন।
jedd.ahyoung

66

সহজ কথায়, ধারাবাহিক প্রতিশ্রুতিগুলিকে ছাড় দেওয়ার সময়, প্রতিটি প্রতিশ্রুতি হিসাবে চিহ্নিত হিসাবে চিহ্নিত করা হয় squash, আপনাকে এর বার্তাটিকে একটি pickবা rewordকমিট বার্তার অংশ হিসাবে ব্যবহার করার সুযোগ দেয় ।

আপনি যখন fixupএই প্রতিশ্রুতি থেকে বার্তা ব্যবহার করা হয় তা বাতিল করা হয়।


তখন কোন বার্তাটি রাখা হয় fixup?
ইগোরগানাপলস্কি

2
@ আইগরগানাপলস্কি গিট ট্রিতে পরবর্তী কমিটের বার্তা। আপনি মূলত এতে আপনার অঙ্গীকারকে "মার্জ" করুন।
আলেকজান্ডার হ্যারল্ডো দা রোচা

15

থেকে Git-রি-বেসের ফলে ডক, "ইন্টারেক্টিভ মোডে" বিভাগে :

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


13

গিট রিবেস - ইন্টারেক্টিভ করার সময় যদি প্রশ্নটি হয় squashএবং গিটে কী পার্থক্য রয়েছে , তবে উত্তরটি প্রতিশ্রুতিবদ্ধ বার্তাfixup

s, squash <commit> = কমিট ব্যবহার করুন তবে আগের কমিটের সাথে মিলিত

f, fixup <commit>= "স্কোয়াশ" এর মতো, তবে এই প্রতিশ্রুতিবদ্ধ লগ বার্তাটি বাতিল করুন


উদাহরণ স্বরূপ:

pick 22a4667 father commit message
squash 46d7c0d child commit message # case 1
# fixup 46d7c0d child commit message # case 2

বার্তা কমিট মধ্যে rebasing পর কেস 1 হবে:

father commit message

child commit message

যদিও প্রতিশ্রুতি বার্তা 2 ক্ষেত্রে:

father commit message
# no sub messages

1

আমি গিট এক্সটেনশনের সাথে টিঙ্কার করেছিলাম এবং অনেকগুলি কমিটকে স্কোয়াশ করতে পারি না। এটি করতে, আমাকে কমান্ড লাইনটি অবলম্বন করতে হয়েছিল এবং এই পোস্টটিকে সহায়ক বলে মনে হয়েছিল

git rebase -i Head~2

এটি ইন্টারেক্টিভ রিবেস, এবং নিম্নলিখিতটি নোট করুন:

  • ~ 2 এখানে বর্তমান প্রধান সহ আপনি কতগুলি প্রতিশ্রুতিবদ্ধ এই অপারেশনে জড়িত থাকতে চান তা বোঝায়
  • আপনাকে পরবর্তী ইন্টারেক্টিভ সম্পাদনা উইন্ডোটি সম্পাদনা করতে হবে, প্রথম আইটেমটিকে "বাছাই" হিসাবে ছেড়ে দিতে হবে এবং "স্কোয়াশ" দিয়ে পরবর্তী লাইনগুলি প্রতিস্থাপন করতে হবে। উপরের লিঙ্কটিতে থাকা নির্দেশাবলী যদি এটি অস্বচ্ছ হয় তবে আরও স্পষ্ট।

আপনার লিঙ্ক করা পোস্টটি স্কোয়াশ এবং ফিক্সআপের স্পষ্ট ব্যাখ্যা সম্পর্কে। ধন্যবাদ!
সাইমন তেউসি

0

গিট নিজেই জিজ্ঞাসা করবেন না কেন? আপনি যখন পুনরায় আক্রমণ করবেন তখন git-bashএটি বলে:

pick 512b1d7 (some comment)
# Rebase 621b2e4..512b1d7 onto 621b2e4 (1 command)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
D:/code/fenixito-legacy-api/.git/rebase-merge/git-rebase-todo [unix] (11:57 23/10/2019)                                         1,1 start
"D:/code/xxx/.git/rebase-merge/git-rebase-todo" [UNIX] 27L, 1170C

তাহলে তুমি দেখ:

s, স্কোয়াশ = ব্যবহার প্রতিশ্রুতিবদ্ধ, কিন্তু পূর্ববর্তী প্রতিশ্রুতিতে মিলিত

f, ফিক্সআপ = "স্কোয়াশ" এর মতো, তবে এই কমিটের লগ বার্তাটি বাতিল করুন

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