git merge upstream/master と git merge upstream master は全くの別物 ― 2020年01月05日 12時55分04秒
git merge upstream/master
は upstream で示されているリモートレボジトリの master ブランチをマージするが、git merge upstream master
は手元の origin の master をマージしてしまう。つまり、git merge upstream master
を行っても、実は upstream の変更を取り込んでいないのだ。
git fetch や git pull では git fetch upstream master
と git pull upstream master
では、これで upstream master を取ってくる。特に、git pull --rebase upstream master
だったりすると、うっかり git merge upstream master
を行ってしまう。
これは、git merge がコミットの羅列を引数として受け取るからだ。それに引き替え git fetch や git pull は第一引数としてレポジトリを受け取り、それ以降にコミットの羅列を引数として受け取る事に起因する。
git のヘルプコマンドでも判る通り、似たような作業を行う merge と rebase のコマンドインターフェースが微妙に違ってややこしい。
git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
[-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
[--[no-]allow-unrelated-histories]
[--[no-]rerere-autoupdate] [-m <msg>] [-F <file>] [<commit>...]
git fetch [<options>] [<repository> [<refspec>...]]
git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
[<upstream> [<branch>]]
git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
--root [<branch>
最近のコメント