12

私は自分のローカル作業に git を使用しており (そしてそれが大好きです)、この記事で説明されているワークフローと同様のワークフローに従います。基本的に、新しい機能を開始するときは、そのためのブランチを作成し、通常のハックとコミットのサイクルを経て、それが終わったと思ったら、 を使用して 1 つのコミットに押しつぶしgit rebase --interactive master、常に終了します。多数のコミット メッセージを記事の例のように編集して、ここに再現します。

[#3275] User Can Add A Comment To a Post

* Adding Comment model, migrations, spec
* Adding Comment controller, helper, spec
* Adding Comment relationship with Post
* Comment belongs to a User
* Comment form on Post show page

もちろん、それは一連の行を削除し、各コミット メッセージの前に# This is the xth commit messageコピー アンド ペーストした後です。*

さて、私が疑問に思っていたのは、 git rebase -i が押しつぶされたコミットメッセージを出力する方法をカスタマイズして、ハッキングをすべて行う必要がないようにする方法はありますか?

(問題があれば、msysgit を使用します。私のエディターは Notepad++ です。)

ありがとう!

4

3 に答える 3

11

Git 2.6 以降 (2015 年第 3 四半期) から、実際には git rebase -i コミット メッセージを構成する方法があります。

Michael Rappazzo ( )によるコミット 16cf51c (2015 年 6 月 13 日)を参照してください。( 2015 年 8 月 3 日コミット 9f56db7Junio C Hamanoによってマージされました)rappazzo
gitster

git-rebase--interactive.sh: カスタム命令フォーマットの設定オプションを追加

構成オプション ' 'は、リベース命令リストのrebase.instructionFormatデフォルト ' ' 形式をオーバーライドできます。oneline

リストは左、右、または境界マークと sha1 を使用して解析されるため、それらは命令形式の先頭に追加されます。

すぐに新しい設定ができます:

rebase.instructionFormat

git log対話型リベース中に命令リストに使用される、 で指定されている書式文字列。
形式には、形式の前に長いコミット ハッシュが自動的に追加されます。

例えば:

git config --add rebase.instructionFormat "[%an @ %ar] %s"

その機能のリリース後にバグ/リグレッションがあることに注意し
ください。

リベース指示シートのコメント行の形式がより厳密になっていることに気付きました - スペースやタブで始めることはできなくなりました。コメント文字 (「#」など) は、最初の列に表示する必要があります。


以下のJefromiのコメント:

結果のコミットメッセージではなく、インタラクティブなリベース内の表示に影響を与えることのみを意図しているようです。

サンプルのフォーマット文字列で試してみたところ、実際にエディターで作成者情報が表示されましたが、スカッシュするように指示した後、結果のテンプレート コミット メッセージは通常のもののままでした。

したがって、これは OP には完全に適合しません。

于 2015-08-16T19:20:12.197 に答える
4

squash メッセージ テンプレートを変更する方法は (ソースをハッキングする以外に) ないと思います。ただし、いくつかのオプションがあります。

  • `git log --pretty="* %s" commit-1..commit-2 のようなショートリストを取得するには、git log コマンドを使用して箇条書きを取得します。Linux では、エディタ内からこれを行うことが非常に可能です - それが msysgit でどのように機能するかはわかりません。

  • 編集者に作業を任せてください! 私はあなたのエディタが何であるかを知らないので、何をすべきかを実際に教えることはできませんが、vim では確かに非常に可能です。(アイデアは次のとおりです:を検索し/# This is the .* commit message/、数行を削除し、1行を保持し、次のコメントまで削除します)

また、この場合はおそらくあなたが望むものではありませんが、かなり最近のバージョンの gitfixupでは、squash の代わりに使用できる識別子があります。これは同じことを行いますが、コミット メッセージを破棄します。実際のメッセージをコミットしてから 10 個の修正を行った場合、それらをすべて修正済みとしてマークするだけで、使い捨てのメッセージを削除する必要はありません。

于 2010-03-19T22:31:46.740 に答える
0

必要に応じて --amend を作成できます。変更したいコミットの前にコミットでチェックアウトし、修正することができます。

于 2010-03-21T10:10:23.423 に答える