এইচজি: গিটের রিবেসের মতো রিবেস কীভাবে করবেন


207

গিটে আমি এটি করতে পারি:

1. নতুন বৈশিষ্ট্যে কাজ শুরু করুন:
it গিট কো-বি newfeature-123 # (একটি স্থানীয় বৈশিষ্ট্য বিকাশ শাখা)
কয়েকটি কমিট (এম, এন, ও) করুন

মাস্টার এ --- বি --- সি
                \
newfeature-123 M --- N --- O

2. আপ স্ট্রিম মাস্টার থেকে নতুন পরিবর্তনগুলি টানুন:
it গিট টান
(এফএফ-কমিটের সাথে মাস্টার আপডেট হয়েছে)

মাস্টার এ --- বি --- সি --- ডি --- ই --- এফ
                \
newfeature-123 M --- N --- O

3. মাস্টার রিবেস বন্ধ যাতে আমার নতুন বৈশিষ্ট্য 
সর্বশেষতম প্রবাহের পরিবর্তনের বিরুদ্ধে বিকাশ করা যেতে পারে:
(নতুন বৈশিষ্ট্য -১২৩ থেকে)
it গিট রিবেস মাস্টার

মাস্টার এ --- বি --- সি --- ডি --- ই --- এফ
                            \
newfeature-123 M --- N --- O


আমি জানতে চাই যে মার্চুরিয়ালে একই জিনিসটি কীভাবে করা যায় এবং আমি একটি উত্তরের জন্য ওয়েল স্ক্রোল করেছিলাম তবে সবচেয়ে ভাল আমি খুঁজে পেলাম: গিট রিবেস - এইচজি করতে পারে

এই লিঙ্কটি 2 উদাহরণ সরবরাহ করে:
1. আমি স্বীকার করব যে এটি: (উদাহরণ থেকে সংশোধনগুলি আমার নিজস্ব উদাহরণের সাথে প্রতিস্থাপন করে)

hg up -CF  
এইচজি শাখা -f newfeature-123  
এইচজি ট্রান্সপ্ল্যান্ট -a -b newfeature-123 

খুব খারাপ কিছু নয়, এ ছাড়া এটি প্রাক-রিবেস এমএনওকে একটি নিমজ্জিত মাথা হিসাবে ছেড়ে দেয় এবং 3 টি নতুন কমিট এম ', এন', ও 'তৈরি করে যা তাদের আপডেট করা মূললাইনটি বন্ধ করে দেয়।

মূলত সমস্যা হ'ল আমি এখানেই শেষ:

মাস্টার এ --- বি --- সি --- ডি --- ই --- এফ
                \ \
newfeature-123 \ M '--- N' --- ও '
                  \
newfeature-123 M --- N --- O

এটি ভাল নয় কারণ এটি স্থানীয়, অযাচিত কমিটগুলি পিছনে ফেলে দেয় যা বাদ দেওয়া উচিত।

  1. একই লিঙ্ক থেকে অন্য বিকল্পটি হ'ল
এইচজি কিউম্পোর্ট -আর এম: ও
hg qpop -a
hg আপ এফ
এইচজি শাখা newfeature-123
hg qpush -a
hg qdel -r qbase: qtip

এবং এটি কাঙ্ক্ষিত গ্রাফের ফলস্বরূপ:

মাস্টার এ --- বি --- সি --- ডি --- ই --- এফ
                            \
newfeature-123 M --- N --- O

তবে এই কমান্ডগুলি (এগুলির সমস্ত 6!) এর চেয়ে অনেক জটিল বলে মনে হচ্ছে

it গিট রিবেস মাস্টার

আমি জানতে চাই যে এইচজি-তে এটিই একমাত্র সমতুল্য বা অন্য কোনও উপায় পাওয়া যায় যা গিটের মতো সহজ।


7
"এটি ভাল নয় কারণ এটি স্থানীয়, অযাচিত কমিটসকে পিছনে ফেলে দেয় যা বাদ দেওয়া উচিত।" - আসলে, গিট একই কাজ করে। এটি মূল শাখায় করা কমিটগুলি পরিবর্তন বা অপসারণ করে না, এটি কেবল নতুন তৈরি করে যা মাস্টার শীর্ষে একই সেট পরিবর্তন করে। আপনি এখনও পুরানোগুলি ব্যবহার করে অ্যাক্সেস করতে পারেন git reflogএবং তারা আবর্জনা সংগ্রহ না করা পর্যন্ত তারা পুরোপুরি চলে না। আপনি যদি এগুলিকে কোনও নামযুক্ত শাখায় রাখতে চান যাতে আপনার রিফ্লগটি ব্যবহার না করতে হয় তবে রিবেসিংয়ের git branch feature-123_originalআগে করুন।
ম্যাট্রিক্সফ্রোগ

5
এলোমেলো প্রশ্ন: আপনি নিজেই চেঞ্জসেটগুলি / শাখাগুলি আঁকেন বা এমন কোনও সরঞ্জাম রয়েছে যা তা করে?
আমির রাছুম

2
এগুলি কেবল পাঠ্যরঙ্গলার দিয়ে "ওভাররাইট" এ সেট করেছিলাম।
jpswain

উত্তর:


235

ভ্যানসির উত্তরটি আপনি খুঁজছেন , রিবেস এক্সটেনশন। তবে, এমকিউ বা রিবেস উভয়ই কেন পারফরম্যান্সে ডিফল্টরূপে সক্ষম হয় না তা ভেবে দ্বিতীয় বা দু'বার ব্যয় করা মূল্যবান: কারণ পার্কিয়াল সবই অনির্বচনীয় পরিবর্তনকে কেন্দ্র করে। আপনি যখন বর্ণনা করছেন এমন পদ্ধতিতে কাজ করি, যা প্রায় প্রতিদিন হয়, আমি যে ধরণটি গ্রহণ করি তা এখানে:

1. Start working on a new feature:
$ hg clone mainline-repo newfeature-123
do a few commits (M, N, O)

master A---B---C
                \
newfeature-123   M---N---O

2. Pull new changes from upstream mainline:
$ hg pull

master A---B---C---D---E---F
                \
newfeature-123   M---N---O

3. merge master into my clone so that my new feature 
can be developed against the latest upstream changes:
(from newfeature-123)
$ hg merge F

master A---B---C---D---E---F
                \           \
newfeature-123   M---N---O---P

এবং সত্যিই এটি প্রয়োজনীয় যে সমস্ত। আমি একটি নতুন ফিচার -১৩৩ ক্লোনটি দিয়ে শেষ করেছি যখন আমি এতে খুশি হব তখন সহজেই মেইনলাইনে ফিরে যেতে পারি। সর্বাধিক গুরুত্বপূর্ণ, তবে আমি কখনও ইতিহাস পরিবর্তন করি নি । কেউ আমার সিসেটগুলি দেখতে পারেন এবং সেগুলি দেখতে পাবে যে সেগুলি সম্পর্কে মূলত কোডিং করা হয়েছিল এবং আমি কীভাবে আমার পুরো কাজ জুড়ে মূল লাইনে পরিবর্তন নিয়ে প্রতিক্রিয়া জানালাম। প্রত্যেকেই এর মূল্য আছে বলে মনে করে না, তবে আমি দৃ firm় বিশ্বাসী যে আমাদের কী ঘটেছে তা নয়, তবে বাস্তবে যা ঘটেছিল তা আমাদের দেখানো সূত্র নিয়ন্ত্রণের কাজ every প্রতিটি অচল এবং প্রত্যেক অশোধককে একটি অনিবার্য ট্রেস ছেড়ে চলে যেতে হবে এবং প্রত্যাবর্তন করতে হবে এবং অন্যান্য ইতিহাস সম্পাদনার কৌশলগুলি এটি আড়াল করে।

আমি আমার সোপবক্সটি দূরে রাখার সময় ভনকের উত্তর বাছুন। :)


18
নোট: বন্ধ অবশ্যই, গীত না ঠিক আপনি ইতিহাস পুনর্লিখন, শুধুমাত্র নতুন এক সহজে (তৈরি করার অনুমতি দেয় utcc.utoronto.ca/~cks/space/blog/tech/GitNewHistory )। রিবেস এক্সটেনশন যুক্ত করে, মার্চুরিয়াল পুরানো ইতিহাসকে নতুন দ্বারা প্রতিস্থাপনের জন্য একই সঠিক সুবিধাজনক উপায় সরবরাহ করে। কেন? কারণ একত্রীকরণটি সর্বদা সঠিক উত্তর হয় না, বিশেষত যখন আপনার পরিবর্তনটি এফ এর শীর্ষে বিবর্তন হিসাবে দেখা উচিত , এবং বিপরীত নয় (পি ও এর শীর্ষে সংযুক্ত করা হয়)
ভোনসি

19
ভনসি, আমি সম্মত, একীভূত করা সবসময় সঠিক পছন্দ নয়, তবে আমি মনে করি যে কোনও ব্যক্তির ভিসিএসের ইতিহাস তাদের বলতে সক্ষম হতে পারে তার মধ্যে পার্থক্য। আমার মনে হয় "ইতিহাসটি সর্বদা এটিকে সংহত করার চেষ্টা করার আগে কীভাবে চেষ্টা করেছিল তা কার্যকর হয়নি এবং আমি ভেবেছিলাম যে এই সময়ে অকেজো" like বিজ্ঞানীরা সংখ্যাযুক্ত পৃষ্ঠাগুলিতে কলমে লগবুকগুলি রাখেন এবং এএএএফআইসি সফটওয়্যার ইঞ্জিনিয়াররা তাদের টাইপ করা প্রতিটি বাইট সংরক্ষণ করতে হবে। পুনর্লিখনের ইতিহাস, এমনকি সিএস্ট প্যারেন্টেজ, তবে অবশ্যই সঙ্কুচিত এক্সটেনশন, হিস্টেডিট ইত্যাদি vio এটি লঙ্ঘন করে। এটি পুরোপুরি ব্যক্তিগত পছন্দের বিষয়।
Ry4an ব্রাস

14
ব্যক্তিগত পছন্দ জন্য +1। গিটের সাথে আমি ফলস্বরূপ তুচ্ছ ver এটি আমাকে একীভূত করার ইতিহাস সংরক্ষণ করতে সহায়তা করে যেখানে আমি গুরুত্বপূর্ণ মনে করি, তবে বেশিরভাগ সময় লগ পরিষ্কার এবং রৈখিক রাখি।
কোস

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

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

104

আপনি রিবেস এক্সটেনশনটির সন্ধান করছেন । ( সামার অফকোড ২০০৮ এর অংশ হিসাবে কার্যকর করা হয়েছে )

এই ক্ষেত্রে স্থানীয় পরিবর্তনগুলিকে "বিচ্ছিন্ন" করতে, মূলধারার সাথে সংগ্রহস্থলটিকে সিঙ্ক্রোনাইজ করতে এবং তারপরে নতুন দূরবর্তী পরিবর্তনের শীর্ষে ব্যক্তিগত পরিবর্তনগুলি যুক্ত করতে এটি কার্যকর হতে পারে। এই অপারেশনটিকে রিবেস বলা হয়।

থেকে প্রাপ্ত :

বিকল্প পাঠ

প্রতি:

বিকল্প পাঠ


হিসাবে নীচের মন্তব্য দ্বারা steprobe :

আপনি যেখানে পরিবর্তনগুলি টানছেন না এবং আপনার রেপোতে দুটি শাখা রয়েছে সে ক্ষেত্রে আপনি ( ব্যবহার করেkeepbranches ) করতে পারেন :

hg up newfeature-123 
hg rebase -d master --keepbranches

(--keepbranches : মূল শাখার নামটি উত্তরাধিকারী করুন))

Mojca উল্লেখ করেছেন:

আমি ব্যবহার করতে চাই hg rebase --source {L1's-sha} --dest {R2's-sha}, তবে আমি যুক্ত করতে পারি জানি না--keepbranches শেষের দিকে

হিসাবে নীচের সচিত্র দ্বারা জনাথন ব্ল্যাকবার্ন :

 hg rebase -d default --keepbranches

1
আমি রিবেস এক্সটেনশনের দিকে নজর রেখেছি, তবে এটি এখনও আমার কাছে পরিষ্কার নয়। আমি দয়া করে উপরে বর্ণিত কাজগুলি করার পদক্ষেপগুলি ব্যাখ্যা করতে পারেন?
jpswain

6
কেস যেখানে আপনি পরিবর্তন কাছে নেই, এবং আপনি আপনার রেপো তে দুটি শাখা আছে, আপনি করতে পারেন: hg up newfeature-123দ্বারা অনুসরণhg rebase -d master --keepbranches
steprobe

2
আমি বিশ্বাস করি রিবেসে কোনও সমস্যা নেই, এটি কেবল পছন্দের বিষয়। সমস্যাটি হ'ল পুনর্বার অপব্যবহার হয় এবং আমি @ রিওয়ান 4 এর সাথে আছি আবার ইতিহাসটি পুনর্লিখন করবেন না যাতে আপনি কী কী এবং কখন তা জানতে পারবেন।
জর্জে ভারগাস

@ স্টিপপ্রোব: - কিপব্র্যাঞ্চগুলি ব্যবহারের জন্য ইঙ্গিতটির জন্য আপনাকে ধন্যবাদ। আমি ব্যবহার করতে চাই hg rebase --source {L1's-sha} --dest {R2's-sha}, কিন্তু আমি জানি না যে আমি --keepbranchesশেষের দিকে যুক্ত করতে পারি could অন্যান্য নিম্ন র‌্যাঙ্কিংয়ের উত্তরগুলিতে এটি উল্লেখ করা হয়েছে তবে এটি এই উত্তরটিতেও স্পষ্টভাবে লিখতে ভাল লাগবে।
মোজকা

@ মোজকা কোন সমস্যা নেই আমি সেই অনুযায়ী উত্তরটি সম্পাদনা করেছি।
ভনসি

44

ধরে নিই যে আপনার একটি আধুনিক এইচজি ইনস্টলেশন রয়েছে, আপনি কেবল যোগ করতে পারেন:

[extensions]
rebase = 

থেকে ~ / .hgrc।

তারপর আপনি কমান্ড ব্যবহার করতে পারেন hg rebase, hg pull --rebaseঅথবা hg help rebase


2
কমান্ডের এই শর্তগুলিতে কেবল যুক্ত করার জন্য আপনাকে সম্পাদন করতে হবে: hg rebase -s o -d f
সরল-সমাধান

21

আমি মনে করি না উপরের উত্তরগুলি ওপি'র লক্ষ্য অর্জন করেছে, যা ছিল তার কার্য শাখা বজায় রাখা, প্যারেন্ট ব্রাঞ্চের পরবর্তী পয়েন্টের বিরুদ্ধে কেবল প্রত্যাবর্তন।

আসুন আমি এই গ্রাফটি দিয়ে শুরু করি (গ্রাফলগ এক্সটেনশন ব্যবহার করে উত্পন্ন।

@  9a4c0eb66429 Feature 3 commit 2 tip feature3
|
| o  af630ccb4a80 default againagainagain  
| |
o |  98bdde5d2185 Feature 3 branch commit 1  feature3
|/
o  e9f850ac41da foo   

আমি যদি বৈশিষ্ট্য 3 শাখায় থাকি এবং পুনরায় আইনটি বন্ধ করে দিয়ে তা পুনরায় চালু করতে চাই, আমি বুঝতে পারি যে আমি চালাব hg rebase -d default। এটির নিম্নলিখিত ফলাফল রয়েছে:

@  89dada24591e Feature 3 commit 2 tip 
|
o  77dcce88786d Feature 3 branch commit 1  
|
o  af630ccb4a80 default againagainagain  
|
o  e9f850ac41da foo  

কার্যোদ্ধার? আমি তাই মনে করি না. সমস্যাটি হ'ল যখন ফিচার 3 শাখায় কমিটগুলি আবার চালু হয় আবার বৈশিষ্ট্য শাখাটি মুছে ফেলা হয় । আমার প্রতিশ্রুতিগুলি ডিফল্ট শাখায় সরানো হয়েছে, যা আমি প্রথমে এড়াতে চাইছিলাম।

গিটে, ফলাফলটি দেখতে এমন হবে:

@  9a4c0eb66429 Feature 3 commit 2 tip
|
o  98bdde5d2185 Feature 3 branch commit 1 **feature3**
|
o  af630ccb4a80 default againagainagain
|
o  e9f850ac41da foo

লক্ষ্য করুন যে বৈশিষ্ট্য 3 শাখা এখনও বিদ্যমান, দুটি কমিট এখনও বৈশিষ্ট্য 3 শাখায় রয়েছে এবং এটি ডিফল্টরূপে দৃশ্যমান নয়। টাস্ক শাখা সংরক্ষণ না করে, আমি দেখতে পাচ্ছি না যে এটি কীভাবে মার্জ থেকে কার্যত আলাদা different

আপডেট : আমি --keepbranchesএইচজি রিবেস দ্বারা সমর্থিত পতাকাটি আবিষ্কার করেছি এবং আমি সবকিছুই ওকে-ডকি বলে প্রতিবেদন করে খুশি। ব্যবহার করে hg rebase -d default --keepbranches, আমি ঠিক আমার আকাক্সক্ষিত গিট আচরণের প্রতিলিপি করছি। বেশ কয়েকজন পরের নাম এবং আমি কারও ব্যবসায়ের মতো প্রতারণা করছি।


7
সবেমাত্র রিবেস-এ সংরক্ষণকারী - পতাকা সন্ধান করেছে discovered সমস্যা সমাধান. এটি কি আমার কোড ছিল আমি সেটিকে ডিফল্ট করতাম তবে তা কেবল আমারই।
জোনাথন ব্ল্যাকবার্ন

1
আমি মনে করি এটি কার্যকর হবে যদি আপনি উপরের প্রতিক্রিয়ায় সেই বিট তথ্য যোগ করেন - এটি খুঁজে পেতে আমাকে কিছুটা সময় নিয়েছিল।
হংসমারি

3

যেহেতু কিছু লোক এই কথাটি বলেছিল যে তারা মনে করে যে প্রত্যেকটি পুনরুক্তি রাখা ভাল, তাই আমি উল্লেখ করব যে বৃহত্তর ওপেন-সোর্স প্রকল্পগুলির জন্য, সংযুক্তিতে পূর্ণ পরিবর্তনগুলি গ্রহণ করা এবং বিকাশের পুনরাবৃত্তি একটি অগোছালো মূললাইন পুনর্বিবেচনার ইতিহাস তৈরি করবে এবং তৈরি করবে বর্তমান সংস্করণটি কীভাবে পেল তা দেখার জন্য পুনর্বিবেচনার ইতিহাসটি কম দরকারী।

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

X265 অবদানকারী পৃষ্ঠা ব্যাখ্যা করে কিভাবে পরিবর্তন কাজ করছি একটি সেট পুনরায় কমিট তাদের জমা দেওয়ার জন্য প্রস্তুত হতে x265 প্রকল্পে। (কিছুটা প্রতিশ্রুতিবদ্ধ করার জন্য টর্টোইএইচজির ব্যবহার অন্তর্ভুক্ত তবে পৃথক ফাইলে সমস্ত পরিবর্তন হয় না যেমন গিট গুইয়ের মঞ্চ / প্রতিশ্রুতিবদ্ধকরণের জন্য পৃথকীকরণের ভিন্নতা))

প্রক্রিয়াটি হ'ল এইচটি আপ স্ট্রিম টিপকে আপডেট করা এবং তারপরে আপনার সমস্ত পরিবর্তনগুলি কার্যনির্বাহী ডিরেক্টরিতে নির্বিঘ্নে পেতে হবে। আপনি যেটি জমা দিতে চান তার অংশ নয় এমন যেকোনটি শেলভ করুন, তারপরে বাকী অংশটি যথাযথ কমিট ম্যাসেজ সহ আলাদা আলাদা কমিট উপযুক্ত হিসাবে ভাগ করুন।

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

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