Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2822

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

$
0
0
はじめに 皆さんは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にもできるので、宜しければご利用下さい。

Viewing all articles
Browse latest Browse all 2822

Latest Images

Trending Articles