git merge upstream/master と git merge upstream master は全くの別物2020年01月05日 12時55分04秒

git merge upstream/master と git merge upstream master は全くの別物。

git merge upstream/master は upstream で示されているリモートレボジトリの master ブランチをマージするが、git merge upstream master は手元の origin の master をマージしてしまう。つまり、git merge upstream master を行っても、実は upstream の変更を取り込んでいないのだ。

git fetch や git pull では git fetch upstream mastergit 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>

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2020/01/05/9198441/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。