version-control - كيفية تحرير رسالة التزام غير صحيحة في Mercurial؟




tortoisehg commit-message mercurial-commit (11)

أنا فعلت هذا بهذه الطريقة. أولاً ، لا تضغط على تغييراتك أو إذا كنت محظوظًا. انتزاع وتثبيت تمديد collapse . ارتكاب غيرها من التغييرات وهمية. ثم استخدم الانهيار لدمج المجموعتين السابقين في واحد. سيطالبك برسالة التزام جديدة ، مما يمنحك الرسائل التي لديك بالفعل كنقطة بداية. لقد غيرت فعليًا رسالة الالتزام الأصلية.

هذا السؤال لديه بالفعل إجابة هنا:

أستخدم حاليًا TortoiseHg (Mercurial) وارتكبت عن طريق الخطأ رسالة التزام غير صحيحة. كيف أقوم بتحرير رسالة الالتزام هذه في المستودع؟


حسنًا ، اعتدت القيام بهذه الطريقة:

تخيل أن لديك 500 التزام ، ورسالة التزامك الخاطئة في r.498.

hg qimport -r 498:tip
hg qpop -a
joe .hg/patches/498.diff
(change the comment, after the mercurial header)
hg qpush -a
hg qdelete -r qbase:qtip

كما ذكر آخرون أن تمديد MQ هو أكثر ملاءمة لهذه المهمة ، وأنت لا تخاطر بتدمير عملك. لفعل هذا:

  1. تمكين ملحق MQ ، بإضافة شيء مثل هذا إلى hgrc:
    [extensions]
    mq =
    
  2. قم بالتحديث إلى مجموعة التغييرات التي تريد تحريرها ، وعادة ما يكون نصها:
    hg up <rev>
    
  3. استيراد التغييرات الحالية إلى قائمة الانتظار:
    hg qimport -r .
    
  4. تحديث التصحيح وتحرير رسالة الالتزام:
    hg qrefresh -e
    
  5. قم بإنهاء كافة التصحيحات المطبقة (واحد ، في هذه الحالة) وتخزينها كـ changesets العادية:
    hg qfinish -a
    

لست على دراية بـ TortoiseHg ، لكن يجب أن تكون الأوامر مشابهة لتلك المذكورة أعلاه. وأعتقد أيضًا أنه من الجدير بالذكر أن تاريخ التحرير محفوف بالمخاطر. يجب أن تفعل ذلك فقط إذا كنت متأكدًا تمامًا من أن مجموعة التغييرات لم يتم دفعها أو سحبها من أي مكان آخر.


التراجع وإعادة التطبيق هو حل بسيط حقًا ، ولكن يمكن أن يساعد فقط في الالتزام الأخير. تعد قوائم انتظار Mercurial أكثر قوة (لاحظ أنك تحتاج إلى تمكين ملحق قوائم انتظار Mercurial من أجل استخدام الأوامر "hg q *").


تحديث: أضاف Mercurial - قم --amend والذي يجب أن يكون الخيار المفضل الآن .

يمكنك التراجع عن الالتزام الأخير (ولكن الأخير فقط) مع hg rollback ثم إعادة تطبيقه.

هام : يؤدي هذا إلى إزالة الالتزام الأخير (أو السحب) بشكل دائم . لذلك ، إذا كنت قد انتهيت من hg update الذي لم يعد موجودًا في دليل العمل ، فسيتم اختزاله إلى الأبد. لذا قم بعمل نسخة أولاً.

بخلاف ذلك ، لا يمكنك تغيير محفوظات المستودع (بما في ذلك رسائل الالتزام) ، نظرًا لأن كل شيء موجود هناك يتم تحصيله. الشيء الوحيد الذي يمكنك فعله هو تقليم التاريخ بعد تغيير معين ، ثم إعادة إنشائه وفقًا لذلك.

لن يعمل أي من هذا إذا كنت قد قمت بالفعل بنشر تغييراتك (ما لم يكن بإمكانك الاحتفاظ بكل النسخ) ، ولا يمكنك أيضًا "إعادة كتابة السجل" الذي يتضمن الالتزامات الموقعة من قِبل GPG (من قِبل أشخاص آخرين).


الأخبار الجيدة: hg 2.2 أضافت git مثل - الخيار --amend .

وفي tortoiseHg ، يمكنك استخدام "تعديل المراجعة الحالية" عن طريق تحديد سهم أسود على يمين زر الالتزام



هناك نهج آخر مع ملحق MQ وأوامر التصحيح . هذه طريقة عامة لتعديل السجل دون فقد البيانات. اسمحوا لي أن أتحمل نفس الوضع مثل Antonio .

// set current tip to rev 497
hg debugsetparents 497
hg debugrebuildstate
// hg add/remove if needed
hg commit
hg strip [-n] 498

كانت العملية الأخيرة هي الالتزام

لتغيير رسالة ارتكاب آخر التزام عندما تكون آخر عملية زئبقية ملتزمة يمكنك استخدامها

$ hg rollback

للتراجع عن الالتزام الأخير وإعادة الالتزام به بالرسالة الجديدة:

$ hg ci -m 'new message'

ولكن كن حذرًا نظرًا لأن الأمر العودة إلى الحالة السابقة يتراجع أيضًا عن العمليات التالية:

  • استيراد
    • سحب. شد
    • دفع (مع هذا المستودع كوجهة)
    • سيفصل

(راجع hg help rollback )

وبالتالي ، إذا لم تكن متأكدًا من أن آخر أمر زئبقي كان hg ci ، فلا تستخدم hg rollback .

قم بتغيير أي رسالة التزام أخرى

يمكنك استخدام ملحق mq ، الذي يتم توزيعه مع Mercurial ، لتغيير رسالة التزام أي التزام.

هذا النهج مفيد فقط عندما لا تكون هناك مستودعات مستنسخة بالفعل في الجمهور تحتوي على مجموعة التغييرات التي تريد إعادة تسميتها لأن القيام بذلك يغير تجزئة التغيير منه وجميع التغييرات التالية.

وهذا يعني أنه يجب أن تكون قادرًا على إزالة جميع النسخ الموجودة التي تتضمن مجموعة التغييرات التي تريد إعادة تسميتها ، وإلا فإن الدفع / الانسحاب بينهما لن ينجح.

لاستخدام الامتداد mq ، يتعين عليك تمكينه بشكل صريح ، على سبيل المثال ، تحت UNIX افحص ~/.hgrc الخاص بك ، والذي يجب أن يحتوي على الأسطر التالية:

[extensions]
mq=

لنفترض أنك تريد تغيير المراجعة X - أول qimport للواردات من qimport X والإصدارات التالية. الآن هم مسجلون كدليل على بقع تطبيقية. Popping ( qpop ) المكدس الكامل باستثناء X يجعل X متاحًا للتغييرات عبر qrefresh . بعد تغيير رسالة الالتزام ، يجب عليك دفع جميع البقع مرة أخرى ( qpop ) لإعادة تطبيقها ، أي لإعادة إنشاء المراجعات التالية. ليست هناك حاجة إلى كومة من الرقع ، وبالتالي يمكن إزالتها عبر qfinish .

يعرض البرنامج النصي التالي عرض جميع العمليات في العمل. في المثال ، يتم إعادة تسمية رسالة الالتزام من changeset الثالثة.

# test.sh
set -x -e -u
echo INFO: Delete old stuff
rm -rf .hg `seq 5`
echo INFO: Setup repository with 5 revisions
hg init
echo '[ui]' > .hg/hgrc
echo 'username=Joe User <[email protected]>' >> .hg/hgrc
echo 'style = compact' >> .hg/hgrc
for i in `seq 5`; do
  touch $i && hg add $i && hg ci -m "changeset message $i" $i
done
hg log 
echo INFO: Need to rename the commit message or the 3rd revision
echo INFO: Displays all patches
hg qseries
echo INFO: Import all revisions including the 3rd to the last one as patches
hg qimport -r 2:tip
hg qseries
echo INFO: Pop patches
hg qpop 2.diff
hg qseries
hg log 
hg parent
hg qrefresh -m 'CHANGED MESSAGE'
hg log 
echo INFO: Push all remaining patches
hg qpush -a
hg log 
hg qseries
echo INFO: Remove all patches
hg qfinish -a
hg qseries && hg log && hg parent

قم بنسخها إلى دليل فارغ وتنفيذها على سبيل المثال:

$ bash test.sh 2>&1 | tee log

يجب أن يتضمن الإخراج رسالة التغييرات الأصلية:

+ hg log
[..]
2   53bc13f21b04   2011-08-31 17:26 +0200   juser
  changeset message 3

وعملية إعادة تسمية الرسالة التي تم تغييرها:

+ hg log
[..]
2   3ff8a832d057   2011-08-31 17:26 +0200   juser
  CHANGED MESSAGE

(تم اختباره بواسطة Mercurial 1.7.5)


في TortoiseHg ، انقر بزر الماوس الأيمن على النسخة التي تريد تعديلها. اختر تعديل السجل-> استيراد MQ. سيؤدي ذلك إلى تحويل جميع التنقيحات إلى ، بما في ذلك المراجعة المحددة من مجموعات التغييرات Mercurial إلى بقع Mercurial Queue. حدد التصحيح الذي تريد تعديل الرسالة له ، ويجب عليه تغيير الشاشة تلقائيًا إلى محرر MQ. قم بتحرير الرسالة الموجودة في منتصف الشاشة ، ثم انقر فوق QRefresh. وأخيرًا ، انقر بزر الماوس الأيمن على التصحيح واختر "تعديل السجل"> "إنهاء التصحيح" ، الذي سيحولها من تصحيح إلى مجموعة تغيير.

أوه ، هذا يفترض أن MQ هو امتداد نشط لـ TortoiseHG على هذا المستودع. إذا لم يكن الأمر كذلك ، فيجب أن تكون قادرًا على النقر فوق File-> Settings ، والنقر فوق Extensions ، والنقر فوق مربع الاختيار mq. يجب أن يحذرك من أن عليك إغلاق TortoiseHg قبل أن تكون الإضافة نشطة ، لذا أغلق وأعد فتحها.


إن أبسط طريقة للقيام بذلك هي

git tag v1.0.0 f4ba1fc

مع f4ba1fc كونها بداية تجزئة الالتزام الذي تريد f4ba1fc هو الإصدار الذي تريد وضع علامة عليه.





version-control mercurial tortoisehg commit-message mercurial-commit