كيف يمكنني تغيير وقت الالتزام (غير مدفوع بعد)؟

StackOverflow https://stackoverflow.com/questions/585258

  •  06-09-2019
  •  | 
  •  

سؤال

كيف يمكنني تغيير الوقت الذي أجريت فيه ارتكاب مستودعي المحلي؟

لنفترض أنني فعلت عدة ارتكاب ولاحظت أن التاريخ على جهاز الكمبيوتر الخاص بي خطأ. لنفترض أيضا على عدم دفع هذه اللجنة إلى أي مكان حتى الآن.

هل كانت مفيدة؟

المحلول

يمكنك أن تفعل ذلك بسهولة مع MQ (قوائم انتظار الزئبات):

إعداد تاريخ سيء repo

+ hg init
+ echo line
+ hg commit -A -d 12/1 -m first
adding file
+ echo line
+ hg commit -A -d 12/2 -m second
+ echo line
+ hg commit -A -d 12/3 -m third
+ hg log
changeset:   2:81c88de729a8
tag:         tip
user:        Ry4an Brase <ry4an@mini>
date:        Thu Dec 03 00:00:00 2009 -0600
summary:     third

changeset:   1:c1fe70008824
user:        Ry4an Brase <ry4an@mini>
date:        Wed Dec 02 00:00:00 2009 -0600
summary:     second

changeset:   0:abb97adaa541
user:        Ry4an Brase <ry4an@mini>
date:        Tue Dec 01 00:00:00 2009 -0600
summary:     first

تحويل التغييرات إلى بقع في قائمة الانتظار

+ hg qimport -r 2
+ hg qimport -r 1
+ hg qimport -r 0

اجعل كل تصحيح QTIP بدوره وإصلاح التاريخ

+ hg qrefresh -D
+ hg qpop
Now at: 1.diff
+ hg qrefresh -D
+ hg qpop
Now at: 0.diff
+ hg qrefresh -D

إعادة تطبيق البقع

+ hg qpush
applying 1.diff
Now at: 1.diff
+ hg qpush
applying 2.diff
Now at: 2.diff

قم بتشغيل كل تصحيح مرة أخرى إلى مشكلات حقيقية

+ hg qdel -r 0
+ hg qdel -r 1
+ hg qdel -r 2

كل شيء أفضل:

+ hg log
changeset:   2:6b51e14aadfc
tag:         tip
user:        Ry4an Brase <ry4an@mini>
date:        Wed Feb 25 22:29:01 2009 -0600
summary:     third

changeset:   1:5cbb9fc51bcc
user:        Ry4an Brase <ry4an@mini>
date:        Wed Feb 25 22:29:02 2009 -0600
summary:     second

changeset:   0:ec58d1f24278
user:        Ry4an Brase <ry4an@mini>
date:        Wed Feb 25 22:29:02 2009 -0600
summary:     first

نصائح أخرى

إذا كان الأمر مجرد ارتكاب واحد، وأن هذا الالتزام هو أحدث واحد (على أي فرع أنت على)، وهو بطانة سريعة للقيام بذلك هو:

hg commit --amend -d now

هناك --date علم ل hg commit, هذه هي الطريقة التي تكتمل بها الزمان. والسؤال هو كيفية الالتزام بالتغييرات السابقة دون أداة الكثير من الألم.

دعونا نفترض أنك تحصل على تاريخ اللجنة التالية التالية:

dir1> hg commit # r100, OK
dir1> hg commit # r101, need to fix time
dir1> hg commit # r102, need to fix time

إليك حلاي:

hg diff -r100:101 > 101.diff
hg diff -r101:102 > 102.diff
cd ..
hg clone -r100 dir1 dir2 # create a copy just before changesets than needs to be fixed
cd dir2
patch -i ../dir1/101.diff
hg commit -m "Same commit message" --date="required date"
patch -i ../dir1/102.diff
hg commit -m "Same commit message" --date="required date"
cd ..
rm -rf dir1 &&  mv dir2 dir1 # replace working copy

يمكنك أتمتة تطبيق بقع مع hg patch التي لم أستخدمها في ممارستي بعد.

باستخدام HG's graft و strip يبدو وكأنه بديل أبسط لاستخدام MQ / Patches / evolve.

مع هذه الطريقة، أنت graft يلتزمك بالفرع المكرر الثاني (أثناء الاستفادة من وظيفة تغيير التاريخ graft). ثم من هناك يمكنك فقط strip رجوع الفرع مع التواريخ السيئة .. قل على سبيل المثال، لقد خلقت بطريق الخطأ بعض ارتكاب التواريخ السيئة ويشبه تاريخك مثل الرسم البياني أدناه:

> hg log -GT'{rev}:{desc} ({date|isodatesec})'
@  8:good commit (2018-03-18 20:13:07 2018 -0500)
|
o  7:erroneous commit two (2018-12-01 00:00:00 2018 -0600)
|
o  6:erroneous commit one (2018-12-01 00:00:00 2018 -0600)
|
o  5:commit before you started commiting bad dates

لإصلاح هذا الأمر، ما عليك سوى التحديث إلى آخر مراجعة جيدة قبل ارتكابها الخاطئة ثم انسخ ارتكاب فرع جديد (مجهول) باستخدام graft:

> hg up 5
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> hg graft -D -r6 -r7 -r8
> hg log -GT'{rev}:{desc} ({date|isodatesec})'
@  11:good commit (2018-03-18 20:14:48 2018 -0500)
|
o  10:erroneous commit two (2018-03-18 20:14:48 2018 -0500)
|
o  9:erroneous commit one (2018-03-18 20:14:48 2018 -0500)
|
| o  8:good commit (2018-03-18 20:13:07 2018 -0500)
| |
| o  7:erroneous commit two (2018-12-01 00:00:00 2018 -0600)
| |
| o  6:erroneous commit one (2018-12-01 00:00:00 2018 -0600)
|/
o  5:commit before you started commiting bad dates

الآن لديك فروع اثنين متطابقة مع نفس يرتكب مواعيد مختلفة. حتى الآن تحتاج فقط إلى إرجاع تاريخ خطي الخاص بك باستخدام strip في الفرع القديم:

> hg strip -r6 -r7 -r8
saved backup bundle to /home/miles/repo/.hg/strip-backup/ac1973513844-a8f5244e-backup.hg
> hg log -GT'{rev}:{desc} ({date|isodatesec})'
@  8:good commit (2018-03-18 20:14:48 -0500)
|
o  7:erroneous commit two (2018-03-18 20:14:48 -0500)
|
o  6:erroneous commit one (2018-03-18 20:14:48 -0500)
|
o  5:commit before you started commiting bad dates
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top