※mainはremoteに置き換えて読んでも良い
pullとfetch
pullはfetch + mergeなので、pullであっても通常のmergeと変わらない。
fetchすると{origin}/branch
ブランチが出来てそれをマージするだけ
個人だったらpullでも良いとは思うが、基本はfetch->mergeを明示的にやったほうが良さそう
FastFoward
取り込みたいブランチが、今のブランチの先を言っている場合のこと。今のブランチも独自に進んでいたらNonFastFoward
--ff
オプションをつければ、ff可能ならマージコミットは出来ず、ff不可ならできる?
PullによるMerge
git config --global --add pull.ff only
mergeに--ff-only
オプションを付けるのと一緒
git pull
した際のマージでコミットを作らないようにする設定。これを設定しておかないと、git pull
する度に余計なマージコミットができてしまう。この設定をしておけば、Fast-Forward な場合はマージコミットが作られない。
?NoFFの場合マージすら出来ない?
通常のMerge
git config --global --add merge.ff false
mergeに--no-ff
をつけるのと一緒
Fast-Fowardな場合でもmergeコミットを作る
remoteが進んでいる場合
mainをlocalにmerge
Fast-Fowardだと思う
no option
# .gitconfig
[merge]
ff = false
上記の設定をしていないので、今回merge commitは作られなかった
--ff
option
merge commitは作られなかった
--ff-only
option
merge commitは作られなかった
--no-ff
option
351f928 (HEAD -> local) Merge branch 'main' into local
1204725 (main) update a.txt @main
000f700 add a.text @main
merge commitが作られた
localからmainにpushする
出来ない(何もコミットがないから)
$ git merge local
Already up to date.
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-only
option
拒否された
fatal: Not possible to fast-forward, aborting.
--no-ff
option
同様にmerge commitが作られた
mainをlocalにmerge(no conflict)
いずれの場合でもマージコミットが作られる。
コミットによる作業が発生するので当たり前。
リンク