ইতিহাস থেকে মোছা না করে পরিবর্তন ত্যাগ করা


180

একটি প্রতিশ্রুতি রয়েছে যা ঠিক কাজ করে না, তাই আমি ইতিহাস থেকে এটি মুছে না ফেলে এটিকে ত্যাগ করতে চাই ।

আমি পূর্ববর্তী সংশোধন থেকে আপডেট হয়েছি এবং প্রতিশ্রুতিবদ্ধ করেছি, এভাবে একটি নতুন শিরোনাম তৈরি করব।


আমার শাখা নেই, আমি শাখা চাই না, আমি কেবল নতুন মাথাটি ঠিক যেমন ঠিক তেমন করে যেতে চাই ঠিক তেমন কিছুই নয়, অভিনবতা নেই, কোনও মার্জ হবে না, কোনও উদ্বেগ নেই, কেবল আগেরটিকে ভুলে যেতে হবে।

আমি কীভাবে এটি করব তা আবিষ্কার করার মতো মনে হচ্ছে না এবং এটি করা যায় না বলে আমি বিশ্বাস শুরু করি। আমি যা পাই তা হ'ল শাখা সম্পর্কিত জিনিস, বা মার্জ করার জিনিস।


1
এটি আপনার রেপোতে রয়েছে, সুতরাং এটি ইতিহাস থেকে মোছা হয়নি। আপনি একটি নতুন মাথা তৈরি করেছেন, যাতে আপনি ভুল ছাড়াই সংশোধন করে যেতে পারেন। আপনাকে নতুন মাথা নিয়ে যেতে বাধা দিচ্ছে কি?
ataylor

শাখাগুলিতে আপনার বিদ্বেষ কী?
অ্যান্ড্রেস জ্যান ট্যাক

@ আন্ড্রেস এটি শাখাগুলি থেকে একেবারে বিরূপ নয়। এটি বন্ধ করার জন্য কেবল একটি তৈরির নির্বোধের অতিরিক্ত পদক্ষেপ ছাড়াই কাজ করা আমার প্রয়োজন ছিল।
o0 '

যে কেউ পড়ছেন - দয়া করে মনে রাখবেন যে এই দৃশ্যে একটি শাখা ইতিমধ্যে তৈরি করা হয়েছে; : ব্যাখ্যা এই উত্তর দেওয়া নোট stackoverflow.com/a/3692607/3195477
UuDdLrLrSs

উত্তর:


181

আপনি যে সংস্করণটি ভুলে যেতে চান তার সাহায্যে আপনার ভাণ্ডারটিকে মাথায় আপডেট করুন, তারপরে hg commit --close-branchসেই (বেনামে) শাখাটি চিহ্নিত হিসাবে চিহ্নিত করুন। তারপর শাখা যে আপনি মাথা আপডেট না চান, এবং কাজ চালিয়ে যেতে।

আপনি যদি -cবিকল্পটি ব্যবহার করেন তবে আপনি বন্ধ শাখাটি দেখতে পাচ্ছেন hg heads, তবে এটি ডিফল্টরূপে প্রদর্শিত hg mergeহবে না এবং বন্ধ মাথাটির সাথে একত্রীকরণের চেষ্টা করবে না।

আপনি hg push --forceযখন প্রথমবার এই বন্ধ মাথাটি অন্য কোনও ভাণ্ডারে ঠেলাবেন তখন আপনাকে প্রথমবার ব্যবহার করতে হবে যেহেতু আপনি যখন চাপ দেবেন তখন আপনি রিমোট রিপোজিটরিতে আসলে অতিরিক্ত মাথা তৈরি করেন। সুতরাং মার্কুরিয়ালকে বলুন যে এটির সাথে ঠিক আছে --force। যে সমস্ত লোকেরা মাথা বন্ধ করে দেয় তারা কোনও সতর্কতার দ্বারা বিরক্ত হয় না।


3
@ নিলাল সি, কেবলমাত্র সে কাজ করবে না যদি তিনি সেটিকে একটি নামকৃত শাখা হিসাবে চিহ্নিত করেছেন? আমি যা বলছি তার থেকে আমি ধরে নিচ্ছি যে সে এটি করেছে যে এটি ডিফল্ট ছিল
মিসারচেট

তবে ... এটি সত্য নয়, আমি ফোন করার সময় আমি উভয় মাথা hg headsতালিকৃত পেয়েছি ... আমি পারদর্শী 1.4.3 ব্যবহার করছি, এটি কি নতুন বৈশিষ্ট্য?
o0 '

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

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

2
আমার ক্ষেত্রে, আমার ডিফল্ট নামে পরিচিত একটি শাখা রয়েছে (এটি স্ট্যান্ডার্ড) এবং অন্য আরেকটি বলা হয় ডিফল্ট / মাস্টার (রিমোট ডিপো আসলে গিটের কারণে আমি মনে করি)। এইচজি আপডেট ডিফল্ট / মাস্টার; এইচজি কমিট - ক্লোজ-শাখা; এইচজি আপডেট ডিফল্ট আমার জন্য কাজ করেছিল।
ম্যাটডি

68

আমি জানি আপনি এই পর্যায়ে শাখা নিয়ে কাজ করতে চান না , তবে আপনি ঠিক তাই করেছেন। আপনি যখন আগের সংস্করণে ফিরে গিয়ে কিছু কাজ করেছিলেন যা কাজ করেছিল তখন আপনি একটি শাখা তৈরি করেছিলেন - একটি নামহীন শাখা, তবে একটি শাখা সমস্ত একই branch


আপনি যেমন আছেন ঠিক তেমন চালিয়ে যাওয়া এবং একাধিক মাথা থাকার বিষয়ে চিন্তা না করার কোনও সমস্যা নেই, তবে আপনি যদি পরিষ্কার পরিচ্ছন্ন করতে চান যাতে আপনি ভুল করে একবারে ভুল মাথাটি না তুলেন তবে আপনি পুরানো শাখাটি কেটে ফেলতে পারেন।

মার্চুরিয়াল ডকুমেন্টেশনে একটি ভাল বিভাগ রয়েছে যা আপনাকে ছাঁটাই মৃত শাখাগুলির চারপাশে বিভিন্ন বিকল্পের মধ্য দিয়ে নিয়ে যায় ।

আমি মনে করি আপনার জন্য সর্বোত্তম বিকল্পটি হল পুরানো শাখাটি "বন্ধ" হিসাবে চিহ্নিত করা। যদি আপনার পুরানো মাথাটি "123" পুনর্বিবেচনা হয় তবে:

hg update -r 123
hg commit --close-branch -m 'Closing old branch'
hg update -C default

3
অস্পষ্টতা - আমি প্রবেশ করার পরে স্রেফ @ নিলালের উত্তরটি দেখেছি। নিলসকে উত্সাহিত করবে এবং খনি শূন্য পয়েন্টের পুলটিতে নিমজ্জিত হতে পারে। :)
নিক পাইয়ারপয়েন্ট

1
আমি আপনার উত্তরটি আরও ভাল পছন্দ করি, এর জন্য মেরুক্রিয়ালের পরিভাষা কম করা দরকার (যা আমি বলতে পারি যতটা গিট ব্যবহারকারীদের বিভ্রান্ত করার জন্য বেছে নেওয়া হয়েছে)
টাকসওয়েল

8
হ্যাঁ, এটা বিপরীত! মার্উরিয়ালের পরিভাষাটি এসএনএন ব্যবহারকারীদের কাছে প্রাকৃতিক শব্দ হিসাবে বেছে নেওয়া হয়েছিল, যখন গিটটির একটিকে নরক হিসাবে বিভ্রান্ত করছে! যাইহোক, এই উত্তরটিকে সমর্থন করে কারণ এটিতে সর্বশেষ আপডেট রয়েছে -সি
টোবিয়া

2
কেন তুমি হবে -Cমধ্যে hg update? দেখে মনে হবে কোনও ফাইলই সংশোধিত হয়নি, সুতরাং এটি ছাড়া এটি কাজ করা উচিত।
সর্বাধিক

1
আমি যতদূর বলতে পারি, আপনার আর কোথাও সিসি লাগবে না। তবে, আপনি আপডেট করার চেষ্টা করার সময় যদি আপনার মধ্যে অসামান্য পরিবর্তন হয় তবে আপনি একটি গর্ভপাত বন্ধ রাখতে পারবেন।
এলি আলবার্ট

21

প্রথমত, টাইপ করুন:

hg heads

ভাবুন, আপনার তিনটি মাথা তালিকাভুক্ত রয়েছে:

changeset:   223:d1c3deae6297
user:        Your name  <your@email.com>
date:        Mon Jun 09 02:24:23 2014 +0200
summary:     commit description #3

changeset:   123:91c5402959z3
user:        Your name <your@email.com>
date:        Sat Dec 23 16:05:38 2013 +0200
summary:     commit description #2

changeset:   59:81b9804156a8
user:        Your name <your@email.com>
date:        Sat Sep 14 13:14:40 2013 +0200
summary:     commit description #1

ধরা যাক, আপনি শেষ মাথাটি সক্রিয় রাখতে চান (223) এবং বাকিটি বন্ধ করতে চান।

আপনি তারপরে নিম্নলিখিত হিসাবে করবেন:

মাথা # 59 বন্ধ করুন

hg up -r 59
hg ci --close-branch -m "clean up heads; approach abandoned"

মাথা বন্ধ করুন # 123

hg up -r 123
hg ci --close-branch -m "clean up heads; approach abandoned"

পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ

hg push

শেষে ডান মাথায় স্যুইচ করতে ভুলবেন না

hg up -r 223

এবং তুমি করে ফেলেছ.


এটি একটি দুর্দান্ত টিউটোরিয়াল, তবে উদাহরণ প্রতিশ্রুতিগুলি কিছুটা মেটা। আমি আরও ভাল উদাহরণ অন্তর্ভুক্ত করব যাতে আপনার কাছ থেকে পড়াশোনাগুলি আরও ভাল প্রতিশ্রুতি বার্তা সরবরাহ করতে পারে। কিছু একটা --close-branch -m "Closing branch - technique #2 abandoned in favor of technique #3"
জেসন আর। কমসস

5
এছাড়াও, আপনি শেষের দিকে বাছাই করেছেন, আপনার সক্রিয় কপিটি এখনও মাথায় রয়েছে যা আপনি সবে বন্ধ করেছেন closed অন্য পরিবর্তন করার জন্য বন্ধ মাথাতে এটি আবার চালু হবে। hg up -r 223কোনও পরিবর্তন করার আগে আপনি চাইবেন ।
জেসন আর। কমসস

@ জেসন আর। কমবস: ঠিক!
আরতুর বারশেঘিয়ান

@ নিলাল এবং এখনই আমার নিজের অভিজ্ঞতার মতে আপনার একমাত্র একাধিক মাথা ঠেকানোর বিষয়ে সতর্কবার্তাটি পাওয়ার জন্য hg push --forceনয়, প্রয়োজন হবে hg push
ক্র্যাক

1
@ আরতুর আমি সাধারণভাবে সম্মত হই। এক্ষেত্রে hg pushনিজে থেকে আমার পক্ষে কাজ হয়নি। যদি আপনি বহিরাগত রেপোগুলিকে একাধিক প্রধানের কারণে অস্বীকার করেন তবে কীভাবে পরিবর্তনগুলি ঠেলে দেওয়ার পরামর্শ দিচ্ছেন?
ক্র্যাক

12

আপনি ব্যবহার করতে চান hg backout। এটি যে কোনও শিশু পরিবর্তন থেকে চেঞ্জসেটের পরিবর্তনগুলি সরিয়ে দেয়।

একটি ভাল ব্যাখ্যার জন্য এটি দেখুন। মার্চুরিয়াল ব্যাকআউট


2
এটি ঠিক সঠিক উত্তর। ব্যাকআউট কোনও চেঞ্জসেটের বিপরীত যুক্ত করুন, কাজটি পূর্বাবস্থায় ফেরাবেন এবং আপনি কেন ধারণাটি পছন্দ করলেন না তা নিজেকে স্মরণ করিয়ে দেওয়ার জন্য আপনাকে একটি প্রতিশ্রুতিবদ্ধ বার্তা দেবে।
Ry4an ব্রাস

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

1
@ মার্টিন গিসলার, আমি সাধারণভাবে এটির সাথে একমত আছি, তবে ওপি জানিয়েছে যে তিনি শাখা ছাড়াই পরিবর্তনগুলি ত্যাগ করতে চেয়েছিলেন
মিসারচেট

2
@ মার্টিন গিজলার হ্যাঁ আমি সবসময় শাখা প্রশাখার জন্য থাকি কেবল কখনও কখনও খারাপ পরিবর্তনের জন্য সবচেয়ে ভাল
মিসারচেট

1
এটি কখনও কখনও দরকারী হতে পারে, কিন্তু আমি যা চেয়েছিলাম তা আসলে তা ছিল না। যাইহোক ধন্যবাদ :)
o0 '।

2

নিল এবং নিকের উত্তর দুটিই সোজা on যেহেতু আমি নিজেকে প্রচুর ঝোলা মাথা তৈরি করতে দেখি, আমি আরও সহজে মাথা বন্ধ করার জন্য একটি উপনাম লেখার কাজ শেষ করেছি। এটি আপনার যুক্ত করে .hgrc:

[alias]
behead = !REV=$($HG id -i); $HG update $@ -q && $HG ci --close-branch -m "Closing dead head" && $HG update $REV -q

(আপনার যদি ইতিমধ্যে একটি [alias]বিভাগ থাকে তবে আপনি এর পরিবর্তে এতে যুক্ত করতে পারেন)

আপনি এখন একটি সিঙ্গল-কমান্ডে (এবং ম্যানুয়ালি আলাদা চেঞ্জসেটে আপডেট না করে) একটি মাথা বন্ধ করতে পারেন:

$ hg behead 123

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


2

অযাচিত শাখাটি বন্ধ বা স্ট্রাইপ করার বিকল্প হ'ল এটি এমনভাবে মার্জ করা যা এর প্রভাবগুলি পুরোপুরি বাদ দেয়, তবে ইতিহাসে ছেড়ে দেয়। এই পদ্ধতির সাহায্যে those অযাচিত পরিবর্তনগুলি একটি ধাক্কাতে প্রচার করতে পারে - সুতরাং এটি যদি কেবলমাত্র উদ্দেশ্যপ্রণালী হয় use

আসুন বলি যে পরিবর্তনের ইতিহাসটি এরকম দেখাচ্ছে:

1-2-3-4-5-6    
       \    
        7-8-*

এবং এটি 5এবং 6যা আর চাওয়া হয় না।

তুমি এটি করতে পারো:

hg up 8
hg merge -r 6 -t :local
hg commit ...

যা এটি তৈরি করবে:

1-2-3-4-5-6    
       \   \
        7-8-9-*

8আপনি ইতিহাসে কাঙ্ক্ষিত মাথায় কাজ করছেন তা নিশ্চিত করার জন্য আপডেট which

-t :localনির্দেশ করে একত্রীকরণ "টুল" বলা ব্যবহার করতে HG স্থানীয় যা বলা হয়েছে যে সব অন্যান্য শাখা, IE থেকে পরিবর্তন, এক বর্তমান পরিশ্রমী ফোল্ডারের রাষ্ট্র দ্বারা প্রতিনিধিত্ব করা উপেক্ষা করার। আরও তথ্য

এভাবে অবাঞ্ছিত পরিবর্তন 5এবং 6ইতিহাসে সংরক্ষিত হয় কিন্তু আরো সাম্প্রতিক কিছু প্রভাবিত করে না।


2

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

বিবর্তিত এক্সটেনশনের সাহায্যে আপনি কেবল এটি করেন

hg prune -r revname

এবং আপনার জীবনের সাথে চালিয়ে যান। সিএসটি এখনও সেখানে থাকবে, তবে অপ্রচলিত। --hiddenআপনি মার্চরিয়াল কমান্ডগুলির বিকল্পটি পাস না করা না হলে এটি দৃশ্যমান হবে না এবং ডিফল্টরূপে দূরবর্তী সংগ্রহস্থলগুলিতে ঠেলে দেওয়া হবে না। যদিও আমি মনে করি আপনি যদি সত্যিই চান তবে আপনি এটি জোর করতে পারেন।

আপনি যে সিএসটি ছাঁটাই করছেন তা যদি আপনি রাখতে চান পূর্বপুরুষ, তবে আপনাকে hg evolveসেই পরিবর্তনগুলি পুনরায় চালু করতে দৌড়াতে হবে। hg evolveস্বয়ংক্রিয়ভাবে এটি করতে হবে। অন্যথায়, আপনাকে কিছু করতে হবে না।


1

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

hg clone --rev myGoodResition myDirtyRepo myCleanRepo

1
দুঃখিত, এটি আমি যা চেয়েছিলাম তা সম্পূর্ণ নয়।
o0 '

4
@ ক্রিস্টফ: এটি কি রসিকতা? আমার পোস্টের প্রথম লাইনটি পুনরায় পড়ুন : " ইতিহাস থেকে এটি মোছা ছাড়াই এটিকে ত্যাগ করুন "
o0 '।

-1

আমি এই সমস্যাটি বহুবার ছড়িয়ে দিয়েছি যখন আমি কোনও মাথাতেই মাথা বিদ্ধ করতে চাই যা ভুল সময়ে তৈরি হয়েছিল। আমি সর্বদা এটি পৃথিবীর মুখ থেকে মুছে যাওয়া দেখতে চাই।

আপনার স্থানীয় অনুলিপিতে, সর্বশেষ এবং তারপরে পান:

  1. আপনি ফিরতে চান এমন একটি মাথাটির সন্ধান করুন (যেখানে একটি নতুন ঘাড় শাখা শুরু করে), পুনর্বিবেচনা নম্বরটি পান

  2. এটি স্ট্রিপ।


উত্স: টিপস অ্যান্ড ট্রিক্স

সূত্র: ছাঁটাইপড্যাড ব্রাঞ্চগুলি # ইউজিং_স্ট্রিপ

hg --config extensions.hgext.mq= strip -n <rev>
  1. একটি তুচ্ছ ফাইল আপডেট করুন (কোনও ফাইলে একটি সাদা স্থান যুক্ত করুন), প্রতিশ্রুতিবদ্ধ এবং চাপ দিন।

আপনার রেপোতে এখন মাথা ছিনিয়ে নেওয়া উচিত। শেষ পদক্ষেপটি গুরুত্বপূর্ণ কারণ স্ট্রিপিং কোনও পরিবর্তন তৈরি করে না যা আপনি আপনার কেন্দ্রীয় ভাণ্ডারে ঠেলাতে পারেন। শেষ পদক্ষেপ ব্যতীত আপনি কেবল স্থানীয়ভাবে মাথা ছিনিয়ে নিয়েছেন।


1
তবে, পুশ করা দূরবর্তী সংগ্রহস্থল থেকে কোনও কিছুই মুছে না anything এটা শুধুমাত্র কি কখনো যোগ করুন। পরিবর্তনটি যদি ইতিমধ্যে কেন্দ্রীয় ভান্ডারে থাকে তবে আপনাকে হয় বিবর্তিত এক্সটেনশনটি ব্যবহার করতে হবে, বা কোনওভাবে এটি কেন্দ্রীয় সার্ভারে নিজেই স্ট্রিপ করতে হবে। যদি পরিবর্তনটি ইতিমধ্যে কেন্দ্রীয় ভান্ডারে নেই, তবে স্থানীয়ভাবে এটিকে ছড়িয়ে দেওয়া কোনও ধাক্কা ছাড়াই যথেষ্ট হবে।
বেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.