43

したがって、非常に単純な使用例があります。「今日の作業」ブランチからマスターに戻る必要があるすべてのコミットを押しつぶしたいと考えています。

今までこれを使ってきましたが、うまくいきgit rebase -iません。最終コミットのタイムスタンプが正しくありません。

これを行う例を次に示します。

[work1] git checkout master
Switched to branch 'master'

[work1] git rebase today
First, rewinding head to replay your work on top of it...
Fast-forwarded master to today.

[work1] git log --pretty=format:"%h%x09%an%x09%ad%x09%s"
5ad95ff Doug    Wed Nov 7 10:12:42 2012 +0800   Updated TODO again
abb891c Doug    Wed Nov 7 10:12:24 2012 +0800   Added more work
c5fd35c Doug    Wed Nov 7 10:11:50 2012 +0800   Added more work
a98facd Doug    Wed Nov 7 10:11:22 2012 +0800   Add work
b4465be Doug    Tue Nov 6 21:38:53 2012 -0800   Updated TODO
403cea9 Doug    Fri Jan 2 21:38:53 2009 -0800   Added todo

そうです、ここで最後の 4 つのコミットを 1 つのコミットにまとめたいと思います。

[work2] date
Wed  7 Nov 2012 10:39:39 WST

[work2] git rebase -i b4465be

pick a98facd Add work
squash c5fd35c Added more work
squash abb891c Added more work
squash 5ad95ff Updated TODO to reflect todays work

そして結果:

[work2] git log
commit 3f7f1d2eb4ef23c73dce95f718152c7d5683a926
Author: Doug <doug@null.com>
Date:   Wed Nov 7 10:11:22 2012 +0800

    Add work
    Added more work
    Added more work
    Updated TODO to reflect todays work

commit b4465bee5b278214704edcfef3f6e222b5b52964
Author: Doug <doug@null.com>
Date:   Tue Nov 6 21:38:53 2012 -0800

    Updated TODO

いいえ!それは私が欲しかったものではありません。結果のコミットのタイムスタンプは、押しつぶしたコミットのタイムスタンプです。私が欲しかったのは、新しいコミット日を現在の時刻にすることでした。

私が話していることを正確に示すために:

[work2] date
Wed  7 Nov 2012 10:39:39 WST

Author: Doug <doug@null.com>
Date:   Wed Nov 7 10:11:22 2012 +0800

結果のコミットをマージ時間までに日付にしたい、つまり。今、コミットの時ではありません。

私が知る限り、新しいコミットではなく、前のコミットに押しつぶすことしかできませんが、これを行う方法はありますか?

正しい解決策は

  1. マージメッセージと正しいコミット日時で新しいコミットを作成し、
  2. ??? <--- どういうわけか、以前のコミットをこのコミットに押しつぶします。

それ、どうやったら出来るの?

4

4 に答える 4

67

ハック:使用できます

git commit --amend --reset-author

git commit のマニュアル ページには、これにより「作成者のタイムスタンプも更新される」と記載されています。コミットを変更する必要はなく (ローカルで試しました)、タイムスタンプが現在の時刻に更新されます。確かに一種の虐待ですが、うまくいくようです。

于 2012-11-07T12:25:39.413 に答える
5

の代わりにgit rebase -i b4465be、最近のログをクリップボードにコピーして、次の操作を行います。

git reset --soft b4465be
git commit

変更ログを貼り付けて編集し、コミット メッセージ エディターを保存して終了します。

于 2015-06-06T20:16:55.030 に答える
0

スカッシュに頼らず、機能ブランチ全体を比較するのはどうですか: http://dymitruk.com/blog/2012/02/05/branch-per-feature/

于 2012-11-07T03:41:08.417 に答える