logo
/
👀gitのmergeを攻略する
※mainはremoteに置き換えて読んでも良い

pullとfetch

pullはfetch + mergeなので、pullであっても通常のmergeと変わらない。
fetchすると{origin}/branchブランチが出来てそれをマージするだけ
個人だったらpullでも良いとは思うが、基本はfetch->mergeを明示的にやったほうが良さそう

FastFoward

取り込みたいブランチが、今のブランチの先を言っている場合のこと。今のブランチも独自に進んでいたらNonFastFoward --ffオプションをつければ、ff可能ならマージコミットは出来ず、ff不可ならできる?

PullによるMerge

Loading...
mergeに--ff-onlyオプションを付けるのと一緒 git pull した際のマージでコミットを作らないようにする設定。これを設定しておかないと、git pull する度に余計なマージコミットができてしまう。この設定をしておけば、Fast-Forward な場合はマージコミットが作られない。
?NoFFの場合マージすら出来ない?

通常のMerge

Loading...
mergeに--no-ffをつけるのと一緒 Fast-Fowardな場合でもmergeコミットを作る

remoteが進んでいる場合

mainをlocalにmerge

Fast-Fowardだと思う

no option

Loading...
上記の設定をしていないので、今回merge commitは作られなかった

--ff option

merge commitは作られなかった

--ff-onlyoption

merge commitは作られなかった

--no-ff option

Loading...
merge commitが作られた

localからmainにpushする

出来ない(何もコミットがないから)
Loading...

localが進んでいる場合

remoteが進んでいる場合の逆

remote/local両方進んでいる場合

mainをlocalにmerge(no conflict)

Non Fast-Fowardだと思う

no option

merge commitが作られた
98df68c (HEAD -> local) Merge branch 'main' into local
f235a11 add b.txt @local
8c535d9 (main) update a.txt@main
000f700 add a.text @main

--ff option

同様にmerge commitが作られた

--ff-onlyoption

拒否された
fatal: Not possible to fast-forward, aborting.

--no-ff option

同様にmerge commitが作られた

mainをlocalにmerge(no conflict)

いずれの場合でもマージコミットが作られる。
コミットによる作業が発生するので当たり前。

リンク