মার্চুরিয়াল - পুরানো সংস্করণে ফিরে আসুন এবং সেখান থেকে চালিয়ে যান


249

আমি কোনও প্রকল্পের জন্য স্থানীয়ভাবে মার্কুরিয়াল ব্যবহার করছি (এটিই একমাত্র রেপো যাতে অন্য কোথাও থেকে ধাক্কা / টানতে পারে না)।

আজ অবধি এটি একটি রৈখিক ইতিহাস পেয়েছে। যাইহোক, আমি এখন উপলব্ধি করেছি যে আমি এখন বুঝতে পেরেছি এটি একটি ভয়ঙ্কর পদ্ধতির এবং আমি সংস্করণটি শুরু করার আগে ফিরে যেতে এবং এটি অন্যভাবে প্রয়োগ করতে চাই।

আমি মার্চুরিয়ালে branch/ revert/ update -Cকমান্ডগুলির সাথে কিছুটা বিভ্রান্ত । মূলত আমি 38 সংস্করণে ফিরে যেতে চাই (বর্তমানে 45-এ) এবং আমার পরবর্তী চুক্তিগুলি পিতামাতা হিসাবে 38 আছে এবং সেখান থেকে চালিয়ে যেতে চাই। 39-45-র সংশোধনগুলি চিরতরে হারিয়ে যায় বা তাদের নিজস্ব কোনও মৃত-শখের শাখায় শেষ হয় কিনা আমি তা চিন্তা করি না।

আমার কোন কমান্ড / কমান্ডের সেট দরকার?


6
আগ্রহী যে কারও জন্য, এটি সম্পর্কিত সাইডবারে পপ আপ হয়েছে যা পুনর্নির্মাণ
পাওলো

উত্তর:


150
hg update [-r REV]

পরে যদি আপনি প্রতিশ্রুতিবদ্ধ হন তবে আপনি কার্যকরভাবে একটি নতুন শাখা তৈরি করবেন। তারপরে আপনি কেবল এই শাখায় কাজ চালিয়ে যেতে পারেন বা অবশেষে বিদ্যমানটিকে এটিতে মার্জ করতে পারেন।


6
পরবর্তী প্রতিশ্রুতি একটি নতুন শাখা তৈরি করবে। আপনি যদি অনিশ্চিত থাকেন তবে কেবলমাত্র আপনার ভাণ্ডার (ওয়ার্কিং কপি সহ) একটি ব্যাকআপ তৈরি করুন, চেষ্টা করে দেখুন - ফলাফলটি পছন্দ করবেন না -> কোনও মূল্য ছাড়াই স্ক্র্যাচ থেকে শুরু করুন
ভ্যান

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

উত্তরটি ঠিক আছে, মার্জ সম্পর্কে কিছুটা বাদে (আমি মনে করি না যে প্রশ্নকারী একীভূত করতে চাইবে)।
ctrl-alt-delor

3
@ নিওন ওয়ার্জ আরইভি হ'ল সংশোধনের জন্য কেবল স্থানধারক। এটি এর নম্বর, এটির হ্যাশ, একটি বুকমার্ক ইত্যাদি হতে পারে। ট্রেভর: এটি সন্দেহজনক নয় কারণ এটি কোনও কিছুতে মার্জ করে না। কোন দরকার নেই.
ড্যানমান

401

কমান্ডগুলির সাথে প্রতারণামূলক শীটটি এখানে:

  • hg updateআপনার কার্যকরী অনুলিপি পিতামাতার পুনর্বিবেচনাকে পরিবর্তন করে এবং এই নতুন পিতামাতার পুনর্বিবেচনার সাথে মেলে ফাইলের সামগ্রীর পরিবর্তন করে। এর অর্থ হল যে আপনি যে আপডেটটি আপডেট করেছেন তা থেকে নতুন কমিটগুলি চালিত হবে।

  • hg revertকেবলমাত্র ফাইলের সামগ্রী পরিবর্তন করে এবং কেবলমাত্র ওয়ার্কিং অনুলিপি পিতামাতার পুনর্বিবেচনা ছেড়ে দেয়। আপনি সাধারণত hg revertযখন আপনি সিদ্ধান্ত নেন যে আপনি কোনও ফাইলের যে কাজটি আপনার অনুলিপিতে করেছেন তাতে অনিবার্য পরিবর্তন রাখতে চান না তখন আপনি সাধারণত ব্যবহার করেন ।

  • hg branchনতুন নামের একটি শাখা শুরু করে। আপনি নাম বদলে দেওয়া শাখাকে একটি লেবেল হিসাবে ভাবুন যা আপনি চেঞ্জসেটগুলিতে অর্পণ করেন। সুতরাং আপনি যদি hg branch redতা করেন তবে নীচের পরিবর্তনগুলি "লাল" শাখায় অন্তর্ভুক্ত হিসাবে চিহ্নিত করা হবে। চেঞ্জসেটগুলি সংগঠিত করার এটি একটি দুর্দান্ত উপায় হতে পারে, বিশেষত যখন বিভিন্ন লোক বিভিন্ন শাখায় কাজ করে এবং আপনি পরে দেখতে চান যে পরিবর্তনটি কোথা থেকে এসেছে। তবে আপনি এটি আপনার পরিস্থিতিতে ব্যবহার করতে চান না।

যদি আপনি এটি ব্যবহার করেন hg update --rev 38, তবে 39-45 চেঞ্জসেটগুলি একটি ডেড এন্ড হিসাবে ছেড়ে যাবে - যেমন আমরা এটি ডাকি a আপনি চাপ দিলে আপনি একটি সতর্কতা পাবেন যেহেতু আপনি যে ধরণের ভাণ্ডারটি ধরিয়ে দেবেন সেটিতে আপনি "একাধিক প্রধান" তৈরি করবেন। সতর্কতা রয়েছে যেহেতু এ জাতীয় মাথা ছেড়ে দেওয়া একধরনের অসম্পূর্ণ কারণ তারা পরামর্শ দেয় যে কাউকে মার্জ করা দরকার। তবে আপনার ক্ষেত্রে আপনি কেবল এগিয়ে যেতে পারেন এবংhg push --force যেহেতু আপনি সত্যই এটি ঝুলতে চান না।

আপনি যদি এখনও অন্য কোথাও 39-45 টি পুনর্বিবেচনা না করেন তবে আপনি এগুলি ব্যক্তিগত রাখতে পারেন। এটি খুব সহজ: hg clone --rev 38 foo foo-38আপনি একটি নতুন স্থানীয় ক্লোন পাবেন যার মধ্যে কেবলমাত্র 38 টি পুনর্বিবেচনা রয়েছে contains আপনি কাজ চালিয়ে যেতে পারেন foo-38এবং আপনার তৈরি নতুন (ভাল) চেঞ্জসেটগুলি ধাক্কা দিতে পারেন। আপনার ক্লোনটিতে এখনও আপনার পুরানো (খারাপ) সংশোধন থাকবে foo। (আপনি ক্লোনগুলির নাম পরিবর্তন করতে পারেন তবে আপনি চান, যেমন, fooকরতে foo-badএবং foo-38করতে foo))

অবশেষে, আপনি ব্যবহার করতে পারেন hg revert --all --rev 38এবং তারপরেও প্রতিশ্রুতিবদ্ধ। এই সংস্করণ 46 যা সংস্করণ 38. অভিন্ন তারপর আপনি পুনর্বিবেচনা 46. থেকে কাজ এই অভ্যস্ত একই স্পষ্ট উপায় হিসেবে ইতিহাস একটি কাঁটাচামচ তৈরি চালিয়ে যাব দেখায় তৈরি করবে hg updateনা, কিন্তু অন্যদিকে আপনি পেতে অভ্যস্ত থাকার বিষয়ে অভিযোগ একাধিক মাথা আমি hg revertযদি অন্যদের সাথে সহযোগিতা করে যাচ্ছিলাম যারা ইতিমধ্যে সংশোধন 45 এর ভিত্তিতে নিজস্ব কাজ করেছেন। অন্যথায়, hg updateআরও স্পষ্ট।


2
দুর্দান্ত উত্তর। আমি এইচজি রিভার্ট - সমস্ত --rev ## ব্যবহার করেছি এবং এটি আমার গাধাটিকে বাঁচিয়েছিল: ডি
ভ্যান

1
ঝোলা মাথার শাখাটি বন্ধ করে দেওয়া কি ভাল হবে না ? এটি ভান্ডারগুলিতে ভবিষ্যতের সতর্কতাগুলি রোধ করবে। স্ট্যাকওভারফ্লো.com
জোল্টন

দ্রষ্টব্য: এইচজি রিভার্ট - সমস্ত --rev এক্সএক্সএক্স আপনার স্থানীয় রেপোতে যেখানে থেকে ফিরে যাওয়ার জন্য প্রয়োজনীয় স্থানীয় ফাইলগুলি পরিবর্তন করবে। সুতরাং আপনি যেখান থেকে ফিরে যেতে চান তার আগে আপনাকে আপডেট করতে হবে।
ভিনসেন্ট

পূর্ববর্তী সংস্করণটি বন্ধ করতে, আমাকে প্রথমে একটি রিভার্ট করতে হবে এবং তারপরে একটি আপডেট। বলা হচ্ছে, বেশিরভাগের চেয়ে কম অস্বচ্ছ ব্যাখ্যা।
কোডলকার

30

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

hg revert path/to/file -r-2

এটি -2শেষ প্রতিশ্রুতি দেওয়ার আগে সংস্করণে ফিরে আসবে, এটি ব্যবহার করে -1কেবল বর্তমান অনির্ধারিত পরিবর্তনগুলি ফিরিয়ে দেওয়া হবে।


1
আমি এটি অত্যন্ত দরকারী বলে মনে করি। অবশ্যই -r বিকল্পের জন্য আপনি কেবল সংশোধন নম্বরটি সরবরাহ করতে পারেন
অ্যালেক্স

আপনি একটি নির্দিষ্ট সংশোধনও নির্বাচন করতে পারেন। যেমনhg revert path/to/file -r478
ম্যাট 21

7

আইএমএইচও, hg strip -r 39এই ক্ষেত্রে আরও ভাল মামলা।

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


এই সম্পর্কে জানতাম না। রেপো মোছা এবং পুনরায় ক্লোনিংয়ের চেয়ে সহজ এবং পরিষ্কার। ধন্যবাদ।
মনিকা পুনরায় ইনস্টল করুন - notmaynard

6

ব্যবহারের পরে hg update -r REVএটি পরে কীভাবে সেই পরিবর্তনটি করা যায় সে সম্পর্কে উত্তরে পরিষ্কার ছিল না যাতে আপনি তারপরে চাপ দিতে পারেন।

আপনি যদি আপডেটের পরে কেবল প্রতিশ্রুতি দেওয়ার চেষ্টা করেন, মার্কুরিয়াল মনে করেন না কোনও পরিবর্তন আছে।

আমাকে প্রথমে কোনও ফাইলে পরিবর্তন করতে হয়েছিল (একটি README বলুন) তাই মার্কুরিয়াল স্বীকৃত যে আমি একটি নতুন পরিবর্তন করেছি, তারপরে আমি এটি প্রতিশ্রুতিবদ্ধ।

এটি উল্লিখিত হিসাবে দুটি মাথা তৈরি।

চাপ দেওয়ার আগে অন্য মাথা থেকে মুক্তি পাওয়ার জন্য, আমি তখন নো-অপশন মার্জগুলি অনুসরণ করেছি সেই পরিস্থিতি প্রতিকারের জন্য পদক্ষেপটি ।

আমি তখন ধাক্কা দিতে সক্ষম হয়েছি।


আপনি commit --close-branchপুরানো শাখায় একটি করতে পারেন । আপনি push -fনতুন মাথা ঠেলাতেও পারেন, তবে এটি বর্তমানকে এটি নিয়ে বিভ্রান্তি সৃষ্টি করতে পারে।
ctrl-alt-delor

5

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

hg revert --all --rev ${1}

hg commit -m "Restoring branch ${1} as default"

${1}সংশোধন সংখ্যা বা শাখার নাম কোথায় ? এই দুটি লাইন আসলে বাশ স্ক্রিপ্টের অংশ, তবে আপনি যদি ম্যানুয়ালি এটি করতে চান তবে সেগুলি তাদের নিজেরাই ভাল কাজ করে।

আপনার যদি একটি রিলিজ শাখায় একটি হট ফিক্স যুক্ত করতে হয় তবে এটি ডিফল্ট থেকে তৈরি করতে হবে (যতক্ষণ না আমরা আমাদের সিআই সরঞ্জামগুলি সঠিকভাবে পেয়েছি এবং শাখা থেকে তৈরি করতে সক্ষম হয়েছি এবং পরে রিলিজ শাখাগুলিও বন্ধ করে দিই না)।


1

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

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