どのように私は時間(まだプッシュされていない)をコミットする変更できますか?

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

  •  06-09-2019
  •  | 
  •  

質問

私は私が作った時間を変更することができますどのように私のローカルリポジトリにコミットする?

私はいくつかのコミットを行って、私のコンピュータ上の日付が間違っていることに気づいたとします。これらのコミットはまだどこにも押されていなかったことも想定ます。

役に立ちましたか?

解決

あなたはMQ(Mercurialのキュー)で簡単にそれを行うことができます:

悪い日付のレポを設定する

+ 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

各パッチに順番にQティップを作成し、日付を修正する

+ 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

他のヒント

それがコミット1つだけだし、それがコミットこれを行うためのクイックワンライナーは、(あなたがにしているものは何でも枝に)最も最近のものである場合:

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のgraftstripを使用すると、MQ /パッチを使用して単純な代替のように思える/進化ます。

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