😀

Git操作小技集

2023/12/25に公開

自分用メモも兼ねて、Gitでよく使う操作を整理します。

変更したファイルの一覧を書き出したい

納品する時によく使います。
コマンドは以下です。

git diff --name-status 変更前コミットハッシュ値..変更後コミットハッシュ値 > 変更差分を出力するファイル名.text

ハッシュ値は、git logで確認が可能です。以下の赤枠部分がハッシュ値です。

具体的に出力される内容は以下のとおりです。

M	hoge.js
M	hogehoge.css
A	hoge.html

この時、行の頭の文字はどのような変更がかかったのかがわかります。
よく見るのは以下の5つです。

  • A(Added):追加
  • C(Copied):コピー
  • D(Deleted):削除
  • M(Modified):修正
  • R(Renamed):リネーム

コミット直前の状態に戻したい時

git reset --soft HEAD^

ステージングされた状態まで戻してくれます。
個人的にsoftオプションがわかりやすく、一番便利な気がします。

ローカルでコンフリクト解消できない時の対応

たとえばDBなど巨大なファイルがコンフリクトした場合、エディタのコンフリクト解消エディタで操作をすると重すぎて操作できなくなってしまうことばあります。
片方に合わせたい(片方のファイルを完全に正とする)場合はコマンドで解消が可能です。
現在のブランチに合わせて欲しい時は

git checkout --ours [ファイル名]

マージするブランチに合わせて欲しい時はで解消可能です。

git checkout --theirs [ファイル名]

git addを便利に使う

addするときに以下のようにpオプションをつけると便利です。

git add -p

対話形式でどんな変更が行われたか表示され、変更箇所ごとに「変更をステージングするか」を設定できます。
実装時に一時的にコメントアウト箇所した箇所を見つけられたりなど便利です。

コミットをまとめる

操作したいcommitを3とした場合、以下のように入力します。

git rebase -i HEAD~2

そうすると、以下のようにcommitが表示されます。(上が新しいcommit)

pick b45fcxx feat: フォルダ構成変更2
pick d3fxx84 feat: フォルダ構成変更1

まとめたいcommitのpickをsquashに書き換えます。

なお、オプションは以下のとおりです。

  • p, pick = コミットを使う
  • r, reword = コミットを使うが、コミットメッセージを編集する
  • e, edit = コミットを使うが、修正を中断する
  • s, squash = コミットを使うが、前のコミットにマージする
  • f, fixup = "squash "と同じだが、このコミットのログメッセージを破棄する。
  • x, exec = シェルを使ってコマンドを実行する。

参考文献

3.6 Git のブランチ機能 - リベース
Git 2.27 での git pull 時の warning について
複数のコミットを1つにまとめる方法

Discussion