コミットメッセージを変更せずにコミットを修正する方法(前のものを再利用)?


657

なしコミット修正する方法があるvi(またはあなた$EDITOR)あなたのコミットメッセージを変更するオプションをポップアップ、単に前のメッセージを再利用しますか?


6
私は修正の悪をハードな方法で学んだ後、自分の質問に反対票を投じます。
Sridhar Sarnobat 2014

28
特定のルールを順守している限り(既にプッシュされているものを修正しないなど)、修正が悪いことになる理由はありません。
paullb 2014年

3
修正のコミットは、単一の論理変更中の断続的な作業のコミットには使用しないでください。あなたがローカルで正常にコミットした後、必要があることについて、スカッシュ、一度完成(@シュリダール-Sarnobat)の歴史をコミット
DBCerigo

3
@DBCerigoに完全に同意します。修正が役立つと思う唯一の状況は、以前のコミットでファイルをステージングするのを忘れた場合(たとえば、ファイルが新しく、git commit -aを実行しても自動ステージングされないため)で、遡及的にコミットする場合です。
Sridhar Sarnobat

1
履歴を変更することの危険性を認識していても、最新のコミットメッセージに不満があり、リベースせずにメッセージを書き直したい場合でも、もう1回修正すると便利です。
Sridhar Sarnobat

回答:


1011

git 1.7.9バージョン以降git commit --amend --no-edit、結果を取得するために使用することもできます。

これには、タイムスタンプなど、他のコミットからのメタデータが含まれていないことに注意してください。


42
また、エイリアスを追加することで、-no-editフラグのデフォルト設定を簡単にすることもできます: "amend = commit -a --amend --no-edit"
Jherico

1
@Jherico -aを削除することをお勧めします。アトミックコミットを実行してください。確認またはリベースする方が簡単です。)
frouo

120

git commit -C HEAD --amendあなたがしたいことをします。この-Cオプションは、別のコミットからメタデータを取得します。


15
アンディの答えに追加するだけです。これが頻繁に行うことである場合は、を使用してエイリアスを設定できますgit config --global alias.amend 'commit --amend -C HEAD'。その後git amend、ショートカットとして使用できます。
mikej 2012

9
皆さん、怠惰ではなく、gitをアップグレードして、Shaggleが提案する組み込みコマンドを使用してください!ただし、-Cオプションの場合は1つ。
Dimitris Baltas

4
タイムスタンプだけでなく、著者情報も!
user1338062 2015

3
@RyanCastner確かに、あなたが参照しているコメントは2013年のものでした。私が現在実行しているgitバージョンでは--amend、他のオプションがなくても、作成者の日付は保持されます(ただし、コミット日付は変更されます)。そのため、古いコメントを削除しました。
Ruben Verborgh 2017

2
実際には、この回答は、受け入れられた回答でなくても、別の方法で価値があります。他の回答とは異なり、を使用する必要はありません—amend。新しいコミットを作成できますが、以前のコミットと同じメッセージを使用します。便利なように聞こえないかもしれませんが、コミットメッセージを考えずに作業を保存しているときのデフォルトのコミットメッセージです。メッセージを再利用し続けます—message=“Work in progress (untested)”
Sridhar Sarnobat

67

別の(ばかげた)可能性は、git commit --amend <<< :wqvi(m)がである場合です$EDITOR


39
このユースケースでそれが必要ない場合でも、vimにパイプ接続できることを知りませんでした。それはいくつかの興味深い可能性を開きます。素晴らしいヒント。
Sridhar Sarnobat

6
... <<< ZZタイピングはもっと少ないかもしれません;)
Ruslan

6
..それ以下- ... <<< :x:)
skwisgaar

3
ばかげているとは思いません。これは、viを開くコマンドのワークフローを改善する優れた方法です。
Bセブン

12
三重山かっこ。それは新しいです。
オリゴフレン2017年

16

受け入れられた回答を拡張するために、次のことも実行できます。

git commit --amend --no-edit -a

現在変更されているファイルを追加します。


11

受け入れられた回答を使用してエイリアスを作成する

 oops = "!f(){ \
    git add -A; \
    if [ \"$1\" == '' ]; then \
        git commit --amend --no-edit; \
    else \
        git commit --amend \"$@\"; \
    fi;\
}; f"

その後、あなたはできる

git oops

そしてそれはすべてを追加し、同じメッセージを使用して修正します

または

git oops -m "new message"

メッセージの置き換えを修正する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.