Gitでコンフリクトした時のための備忘録

コンフリクトしたときに便利そうなので、備忘録を残しておく

Gitのコマンド

コンフリクトしているファイルの一覧を表示する。
$ git ls-files -u [<path>]
ファイルの状態(コンフリクト含む)を表示する。
  • -s でshort-format
  • で特定のディレクトリのファイル一覧を表示できる
$ git status [<path>]
手動で直す方法
  • 修正後にaddが必要
$ vi <path>
(手動でコンフリクトを直す)
$ git add <path>
mergetool でマージする方法
  • -y でデフォルトのマージツールが実行する
  • で1つずつ指定できる
$ git mergetool -y [<path>]
をHEADと同じ状態にする。
  • 修正後にaddが必要
$ git checkout --ours [<path>]
$ git add <path>
をマージで指定したブランチ*1と同じ状態にする。
  • 修正後にaddが必要
$ git checkout --theirs [<path>]
$ git add <path>

grep

admin が含まれているファイル一覧
$ git status -s | grep "admin"
view が含まれていないファイル一覧
$ git status -s | grep -v "view"

awk で部分文字列を取得する

コンフリクト(先頭が"UU")しているファイルの一覧
  • substr(string, m, n): 文字列 string 内の m 番目から始まる長さ n の部分文字列を返す
$ git status -s | grep "^UU" | awk '{print substr($0,4,1000)}'

bash

for文
$ for x in a, b, c; do echo x; done

上記の組み合わせ

コンフリクトしているファイルをHEADが正としてコンフリクトを解消する。
$ for f in `git status -s <path> | grep "^UU" | awk 'print substr($0,4,1000)}'`
do
git checkout --ours $f
git add $f
done

*1:git merge topic とマージしていた場合、topicのこと