2016-06-30 10 views
5

安価なので、毎日のWIPスナップショットを保存するのにcommitを使用します。だから、私のコミット履歴には、多くのスナップショットコミットといくつかの重要なコミットが混在しています。git rebase -iでNEXTコミットに融合するベストプラクティスは?

リモートリポジトリに自分の仕事をプッシュする前に、キーコミットだけを含むように自分の履歴をクリーンアップして、スナップショットのコミットをそのままキーコミットに従うように感じるかもしれません。重要なコミットの日付情報は、いつ、私が何を変えたかを思い出すので、私にとって重要です。

git rebase -iのスカッシュ/フィックスアップコマンドを使用すると、いくつかの助けになるかもしれませんが、PREVIOUSコミットに融合し、著者の日付は私が望むものではありません。

コミットを並べ替えると、頻繁にスクラッシュが発生するため、不要な競合が発生することがあります。これも避けたいものです。

So.私の欲望を満たすベストプラクティスは何ですか?

torekの答えに触発され、[更新] 2016年7月3日
、私は解決策を考え出した:いつものようにgit rebase -iを使用し、目標を設定するには、git reset HEAD~nどこを実行して、私は以前のコミットはeditににメルドすることをコミットnは、私が融合したい先のコメントの数です。 git rebase --continueで残りの作業を終え、その後

% git commit --amend --date "$(grep DATE .git/rebase-merge/author-script | cut -f2 -d '=')"

:とと融合し、変更をコミットします。

+2

句「毎日WIPスナップショット」について:I(および他の多くの)あなたは[早期コミット]することをお勧めします( //blog.codinghorror.com/check-in-early-check-in-often/)、[Commit Often](// sethrobertson.github.io/GitBestPractices/#commit)。生産的な稼働日には、少なくとも* 12ダース以上のコミットがあります。 –

+0

はい、サイトの内容に同意します。私はチーム開発のために働く前に同様のやり方をしました。 –

答えて

2

これは片方向です。いつものようにリベースを使用してください。 fixup-or-squash-commitの処理をeditに設定します。 Gitが停止して修正プログラムを編集できるようにするには、git reset --soft HEAD^; git commit --amend --reset-author-dateを使用しますが、これは "今すぐ"の日付を使用することに注意してください。より多くの制御をし、スカッシュ/フィックスアップから日付を取得するには、そのコミットから作成者日付を取得し、​​を使用してください:おそらく、それを行うための小さなシェルスクリプトを書くでしょう。

(を使用して、現在のコミットの日付をgit reset --soft HEAD^ステップの前に抽出します。コミットメッセージのテキスト、またはコミットID全体を保存することもできます。ソフトリセットはコミットをリポジトリに残しますそれは進行中のrebaseと様々なreflogの両方によって保護されているので、後で、前と同じように、あなたが望むものを抽出することができます。もちろん、作者とコミッター、日付、メッセージは、

スワッシュをもっと先にするには、インタラクティブ編集で複数のリベースまたは複数のスカッシュを実行するか、HEAD^より後でgit reset --softを戻すことができます。

(私はこれを気にしません:特定の日付のスタンプはここでそれが役に立つようではありません。)

+0

ありがとうございます。私はインタラクティブな 'rebase'の間に、作成者のデータ情報が' .git/rebase-merge/author-script'に保存されていることを発見しました。 –

+0

'の存在と名前に注意してください。git/rebase-merge'というファイルはそれほど多くはありませんが、実装の詳細です:以前のバージョンのGitには存在せず、いくつかのリベース操作では異なる名前を持っていました(特に非対話型のリベースは '.git/rebase-apply'を実行します)。もちろん、インタラクティブなリベースをやっていて、Gitバージョンにそのファイルがある場合は、おそらくその内容に頼ることができます。しかし、これを仮定するのは安全ではないでしょう。 – torek

関連する問題