বুধবারে স্থানীয় কমিটগুলি মুছার কোনও উপায় আছে কি?


209

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

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

আবার, আমি কেবলমাত্র "এইচজি সিআই" দিয়ে করা স্থানীয় কমিটগুলি মোছার চেষ্টা করছি। আমি ফাইলগুলি পরিবর্তন করতে, পুনরায় ফিরিয়ে দিতে চাই না etc.


সম্ভাব্য সদৃশ স্ট্যাকওভারফ্লো.com
এন 1.1

12
এটি কোনও নির্লিপ্ত ভুল নয়, যখন বেশিরভাগ লোক একসাথে একই সংগ্রহস্থল নিয়ে কাজ করে তখন এটি স্বাভাবিক কর্মপ্রবাহ।
জুউজাস কনটভেইনিস

উত্তর:


247

" ফালা " এক্সটেনশন সক্ষম করুন এবং নিম্নলিখিত টাইপ করুন:

hg strip #changeset# --keep

#changeset#আপনি যে পরিবর্তনটি সরাতে চান তা হ্যাশ কোথায় is এটি এর থেকে নেমে আসা চেঞ্জসেটস সহ কথিত পরিবর্তনটি সরিয়ে ফেলবে এবং আপনার কার্য ডিরেক্টরিকে অদৃশ্য করে রাখবে । আপনি যদি আপনার প্রতিশ্রুতিবদ্ধ কোড পরিবর্তনগুলিও ফিরিয়ে দিতে চান তবে --keepবিকল্পটি সরিয়ে দিন ।

আরও তথ্যের জন্য, চেক স্ট্রিপ এক্সটেনশন

যদি আপনি "অজানা কমান্ড 'স্ট্রিপ' পান তবে আপনার এটি সক্ষম করার প্রয়োজন হতে পারে। এটি করতে .hgrcবা Mercurial.iniফাইলটি সন্ধান করুন এবং এর সাথে নিম্নলিখিতটি যুক্ত করুন:

[extensions]
strip =

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

stripযখন আপনি কি সত্যিই changesets যে শাখা দূষিত পরিত্রাণ পেতে চান কমান্ড দরকারী। প্রকৃতপক্ষে, আপনি যদি এই প্রশ্নের পরিস্থিতির মধ্যে থাকেন এবং আপনি সমস্ত "খসড়া" পরিবর্তনগুলি স্থায়ীভাবে মুছে ফেলতে চান তবে উপরের উত্তরটি দেখুন , যা মূলত এটি করার পরামর্শ দেয়:

hg strip 'roots(outgoing())'

8
@ ভরথ: আপনাকে এক্সটেনশন সক্ষম করতে হবে
সমরসা

1
মার্উরিয়াল ২.৮, স্ট্রিপটি স্ট্যান্ডলোন এক্সটেনশন, তাই ঠিক আছে strip = মার্চুরিয়াল ২.৮
-এর

104

আপনি যদি এইচজি টার্টোইজ ব্যবহার করে থাকেন তবে কেবল এক্সটেনশানটিকে " স্ট্রিপ " সক্রিয় করুন :

  1. ফাইল / সেটিংস / এক্সটেনশন /
  2. ফালা নির্বাচন করুন

তারপরে নীচের সংশোধনটি নির্বাচন করুন যেখানে আপনি স্ট্রাইপিং শুরু করতে চান, right clickএটি করে এবং নির্বাচন করে:

  1. ইতিহাস পরিবর্তন করুন
  2. ফালা

ঠিক এই রকম:

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

এই উদাহরণে এটি 19 তম সংশোধন থেকে শেষের (22) এ মুছে যাবে।


2
File/Settings/Extensions/আমি আশা করি আমি আরও ভোট যোগ করতে পারে। আপনাকে অনেক ধন্যবাদ!
ডায়াটচেনকো

আহা! আমি এটি চেষ্টা করেছিলাম তবে মনে হচ্ছে "ব্যাকআপ নেই" বা "স্থানীয় পরিবর্তনগুলি বাতিল" না করেও আমার সমস্ত পরিবর্তনগুলি নষ্ট হয়ে গেছে। আমি এই পরিবর্তনগুলি রাখতে চেয়েছিলাম, কেবল তাদের প্রতিশ্রুতিবদ্ধ না! এখনই তাদের পুনরুদ্ধার করার কোনও উপায় আছে ??
টিম টিসডাল

2
আমি এটি সঠিকভাবে করার জন্য কোনও উপায় খুঁজে পাচ্ছি বলে মনে হচ্ছে না, তবে মনে হচ্ছে আপনার যে সামগ্রীটি পাস করতে হবে তা রাখা উচিত --keepএবং টরটোইজ এইচটি বিকল্পটি দেয় না। সুতরাং ... আপনার কমান্ড লাইনে এটি করা দরকার hg strip -r . --keep
টিম টিজডাল

3
স্ট্রিপ সহায়তা থেকে: 'যে কোনও স্ট্রিপড চেঞ্জসেটগুলি ".hg / স্ট্রিপ-ব্যাকআপ" হিসাবে একটি বান্ডিল হিসাবে সংরক্ষণ করা হয় ("এইচজি সহায়তা বান্ডেল" এবং "এইচজি সহায়তা আনবান্ডেল" দেখুন)। এগুলি "এইচজি আনবান্ডেল .hg / স্ট্রিপ-ব্যাকআপ / বান্ডেল" চালিয়ে পুনরুদ্ধার করা যেতে পারে, যেখানে স্ট্রিপ দ্বারা তৈরি করা বান্ডিল ফাইলটি বান্ডিল। '
টিম টিসডাল

সোর্স ট্রি এ এটিও কার্যকর ছিল। ধন্যবাদ!
পোনোমারেঙ্কো ওলেহ

22

আধুনিক উত্তর (মার্চিউরিয়াল ২.১-এর পরে কেবল প্রাসঙ্গিক):

পর্যায়গুলি ব্যবহার করুন এবং আপনি যে গোপনীয়তা (গোপনীয়) হিসাবে ভাগ করতে চান না সেই সংশোধনগুলি চিহ্নিত করুন। আপনি যখন চাপ দিবেন তখন সেগুলি প্রেরণ করা হবে না।

কচ্ছপ এইচজিতে আপনি এর অঙ্গীকার পরিবর্তন করার জন্য প্রতিশ্রুতিতে ডান ক্লিক করতে পারেন।

এছাড়াও: আপনি টান দেওয়ার পরে আপনার স্থানীয় কমিটগুলি ভাগ করে নেওয়া ভাণ্ডারের শিরোনামে সরাতে এক্সটেনশন "রিবেস" ব্যবহার করতে পারেন।


ব্যক্তিগত == গোপন এখন
দিমিত্রি ওসিনোভস্কি

15

যেহেতু অন্য প্রত্যেকে ইঙ্গিত করছে আপনার সম্ভবত কেবল টানুন এবং তারপরে মাথাগুলি মার্জ করা উচিত, তবে আপনি যদি সম্পাদনা ইতিহাসের সরঞ্জামগুলি ব্যতীত আপনার কমিটগুলি থেকে মুক্তি পেতে চান তবে আপনি hg clone -rকেবল এই পরিবর্তনগুলি বাদে আপনার রেপোটি পেতে পারেন ।

এটি তাদের মূল সংগ্রহশালা থেকে মুছে দেয় না, তবে এটি একটি নতুন ক্লোন তৈরি করে যা তাদের নেই। তারপরে আপনি সংশোধিত রেপো মুছতে পারবেন (যদি আপনি চান)।


"এইচজি ক্লোন -আর" স্থানীয় পরিবর্তনগুলি মুছতে পারে? আমি কিছু সহজ রাখতে স্থানীয় কমিটগুলি মুছতে চাই।
ব্যবহারকারী 191535

4
এটি ক্লোন করা সংগ্রহস্থল থেকে এগুলি মুছবে না, তবে এটি একটি নতুন ক্লোন তৈরি করে যা তাদের নেই। তারপরে আপনি চাইলে আপনার সংশোধিত রেপো মুছতে পারেন।
Ry4an ব্রাস

9

আমিও এই সমস্যাটি পেরিয়ে এসেছি। আমি 2 বানিয়েছি commitএবং দুটি চুক্তি রোলব্যাক করে মুছে ফেলতে চেয়েছিলাম।

$ hg rollback

তবে hg rollbackকেবল দুটি প্রতিশ্রুতি নয়, শেষ প্রতিশ্রুতিতে ফিরে আসে। তখন আমি এটি উপলব্ধি করতে পারি নি এবং কোডটি পরিবর্তন করেছি।

যখন আমি hg rollbackসবেমাত্র একটি প্রতিশ্রুতি ফিরিয়েছিলাম, তখন আমি দেখতে পেলাম যে আমি ব্যবহার করতে পারি hg strip #changeset#। সুতরাং, আমি hg log -l 10সর্বশেষ 10 টি কমিটগুলি খুঁজে পেয়েছি এবং আমি যে সঠিক পরিবর্তনটি চাইছিলাম তা পেয়েছিলাম strip

$ hg log -l 10
changeset:   2499:81a7a8f7a5cd
branch:      component_engine
tag:         tip
user:        myname<myname@email.com>
date:        Fri Aug 14 12:22:02 2015 +0800
summary:     get runs from sandbox

changeset:   2498:9e3e1de76127
branch:      component_engine
user:        other_user_name<name@email.com>
date:        Mon Aug 03 09:50:18 2015 +0800
summary:     Set current destination to a copy incoming exchange

......

$ hg strip 2499
abort: local changes found

কী abort: local changes foundমানে? এর অর্থ হ'ল কোডটিতে এমন hgপরিবর্তনগুলি পাওয়া গেছে যা এখনও প্রতিশ্রুতিবদ্ধ হয়নি। সুতরাং, এটি সমাধান hg diffকরার জন্য , আপনার যে কোডটি পরিবর্তন হয়েছে সেগুলি সংরক্ষণ করা উচিত এবং hg revertএবং hg strip #changeset#। ঠিক এই রকম:

$ hg diff > /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff
$ hg revert file_you_have_changed
$ hg strip #changeset#

আপনি উপরের কাজটি করার পরে, আপনি patchআলাদা ফাইলটি করতে পারেন এবং আপনার কোডটি আপনার প্রকল্পে আবার যুক্ত করা যাবে।

$ patch -p1 < /PATH/TO/SAVE/YOUR/DIFF/FILE/my.diff

9

আপনি রিবেস এক্সটেনশনের সাহায্যে আরও সহজে এটি পেতে পারেন, কেবল ব্যবহার করুন hg pull --rebaseএবং শাখা প্রশাখার সমস্যাটি এড়িয়ে আপনার চুক্তিগুলি স্বয়ংক্রিয়ভাবে টানা পুনর্বিবেচনায় পুনরায় মন্তব্য করা হবে।


1
আপনি যদি ভুল কিছু করেন তবে একটি ভুল ইতিহাস এবং সম্ভাব্য দুর্নীতির ব্যয়।
Ry4an ব্রাস


4

hg stripআপনি যা খুঁজছেন তা এটা অনুরূপ এর git resetযদি আপনি Git সাথে পরিচিত।

কনসোল ব্যবহার করুন:

  1. আপনাকে পুনর্বিবেচনার সংখ্যাটি জানতে হবে। hg log -l 10। এই আদেশটি সর্বশেষ 10 টি কমিট দেখায় shows আপনি সন্ধান করছেন প্রতিশ্রুতি সন্ধান করুন। চেঞ্জসেট লাইন থেকে আপনার 4 ডিজিট নম্বর দরকারchangeset: 5888:ba6205914681

  2. তারপরে hg strip -r 5888 --keep। এটি প্রতিশ্রুতি রেকর্ডটি সরিয়ে দেয় তবে সমস্ত ফাইল সংশোধিত রাখে এবং তারপরে আপনি এগুলি পুনঃবিবেশন করতে পারেন। (যদি আপনি কেবল - কিপ অপসারণ করতে ফাইলগুলি মুছতে চান তবেhg strip -r 5888


1

[এইচজি কচ্ছপ ৪.6.১] যদি এটি সাম্প্রতিক ক্রিয়া হয় তবে আপনি "রোলব্যাক / পূর্বাবস্থা" ক্রিয়া (Ctrl + U) ব্যবহার করতে পারেন।

এইচজি কচ্ছপ চিত্র


কোনও চিত্রের অন্তর্ভুক্তিটি ডাবল চেক করুন।
বিল কেলার

0

সামুরসার দুর্দান্ত উত্তর ছাড়াও, আপনি evolveএক্সটেনশানটির pruneনিরাপদ এবং পুনরুদ্ধারযোগ্য সংস্করণ হিসাবে ব্যবহার করতে পারেন stripআপনি কোনও ভুল করলে আপনি ফিরে যেতে পারবেন।

আমার এই নামগুলি আছে .hgrc:

 # Prunes all draft changesets on the current repository
 reset-tree = prune -r "outgoing() and not obsolete()"
 # *STRIPS* all draft changesets on current repository. This deletes history.
 force-reset-tree = strip 'roots(outgoing())'

নোট করুন যে pruneএছাড়াও --keep, ঠিক মত strip, ওয়ার্কিং ডিরেক্টরি অক্ষত রাখতে আপনাকে ফাইল পুনরায় সক্রিয় করার অনুমতি দেয়।

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