gitのマージらへんをマスターしたい












マージコミットのコミットメッセージを付与する

git merge hoge-branch -m "Commit Message"
git merge hoge-branch -m "Commit Message" --no-ff


-mをつければよい。
ファストフォワードの場合は、--no-ffをつけることで、マージコミットが作成される。


マージ(ローカル)をなかったことにする

git reset --soft @~
git reset --mixed @~
git reset --hard @~
git reset --soft "@^"


softはステージに残す。
mixedはワーキングに残す。(デフォ。指定しない場合これ。)
hardは何も残さない。
キャレットを使用する場合は、"ダブルクォーテーション"で囲む。(windowsの場合、改行扱いになる)
チルダとキャレットの違いは割愛。
@はHEADのこと。
HEADは今いるコミットのポインタみたいなもの。

マージツールの設定

ワーキングディレクトリ vs. コミットで差分があるとき、ツールを設定しておけばgit difftool のコマンドで外部ツールで確認できる。差分がないと何も起こらない。

ツールで設定する項目

https://git-scm.com/docs/git-difftool/2.31.0

diff.tool
デフォの差分ツール

difftool.<tool>.cmd
差分ツールを呼び指すコマンド。

difftool.prompt
差分ツールを呼び出す際にプロンプトを表示するか。
プロンプトを表示する必要ない場合に、これも設定する。

なお、差分ツール以外でもプロンプトが表示されることがあるので、全てで無効にするには次のようにする。

git config --global --replace-all core.pager "leff -F- -X"




すでにある設定を上書きするとき、あるオプション(--repalce-all ??)をつけて設定すればよい。


マージツール:p4merge

git config --global merge.tool p4merge
git config --global mergetool.1p4merge.path /Applications/p4merge.app/Contents/MacOS/p4merge
git config --global mergetool.prompt false


~/.gitconfigファイルに設定が追加されているはず。


マージツール:WinMerge

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false





マージツールを使ってマージする

マージしてコンフリクトが起こってる状態で、次のコマンドを実行する。

git mergetol

(実行前にマージツールの設定が必要)




分岐を1本のブランチにする:リベース

リベースしてブランチを1本にしてからマージすることで、マージコミットのようなものが作られない。
→ コミット履歴がすっきり。
既存のコミットを削除して、新たなコミットとして追加されることに注意。
→プッシュされているものに対しては、リベースしない。
基本的にはローカルコミット→ローカルコミットへリベースする。

ワーキングブランチをmainブランチにリベースする

git rebase main


コンフリクトが起こった場合

マージするときと同様、Unmerged pathに追加される。
マージツール等を使用して解消して、次のコマンドを入力。

git rebase --continue