0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

最新のcommitに入れ忘れた変更を入れ直すコマンド

Posted at

はじめに

皆さんはGitを使う際、一部変更を入れ忘れてcommitしてしまうことはありますか?私は比較的よくあります。
私はこれまで変更を入れ直す際、git logしてコミットメッセージを取得して、git addして(実際はVSCodeの機能を使うことが殆どなのですが…)、git commit --amend -m ...としていたのですが、よく考えればそれ用のコマンドを作れば楽なのでは?と思い、コマンドを作成してみました。

コマンド

git log --oneline -n 1 | sed -r 's/^[0-9a-f]+ //' | xargs -I message git commit --amend -m message

解説

git log --oneline -n 1

git logでgitのコミットログを見ることができます。
--onelineオプションで、各commitが1行で表示されるようになります。
-n 1で最新の1コミットのみを表示させることができます。
これによって、最新のコミット1つ1行を取得でき、これを次のコマンドに送り処理する下準備ができます。

sed -r 's/^[0-9a-f]+ //'

先のコマンドで取得した文字列は、1a2b3c4 コミットメッセージのように、ハッシュ値が付いたコミットメッセージになっています。今回コミットメッセージ(+その直後のスペース)を取り除きたいので、更に処理を加えます。
sedはストリームエディタで、複数行の入力に対し処理を行う際に重宝するコマンドです。今回は文字列の一部削除に利用しています。詳しくは他に良い記事があるのでそちらに譲ります。
-rオプションはsedのコマンドで正規表現を使うという意味になります。
's/^[0-9a-f]+ //'は、ざっくり説明すると「行先頭の0-9a-fでできた文字列と、その次の半角スペースを、空文字列で置換する」というコマンドです。
これによって、純粋な最新のコミットメッセージを次のコマンドに送ることができるようになりました。

xargs -I message git commit --amend -m message

先のコマンドで生成した純粋なコミットメッセージを使って、git commit --amendを行います。
xargs -I messageは、パイプで送られてきた文字列を以降のコマンドのmessageの箇所で利用するというものになります。
なので、以降のgit commit --amend -m messageは実行され、そのコミットメッセージはここまでの処理で作られている最新のコミットメッセージになります。

最後に

このコマンドはaliasにもできるので、宜しければご利用下さい。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?