質問: サーバとローカル環境の両方にgitを入れています。 サーバ上のdevelopブランチで直接修正したコードをGitHubにpushした後に、ローカル環境で同じブランチから以下のコマンドでpullしようとしてもAlready up to dateと表示されます。 ``` $ git branch * develop $ git pull origin HEAD From https://github.com/(GitHubリポジトリ名) * branch HEAD -> FETCH_HEAD Already up to date. ``` しかし、HEADではなくブランチ名を直接指定するとサーバからpushしたコミットが期待通りpullされます。 ``` $ git pull origin develop From https://github.com/(GitHubリポジトリ名) * branch develop -> FETCH_HEAD Updating 1d0a424..0e75c87 ``` HEADはいまいるブランチを指しているという理解だったので、git pull origin HEADもgit pull origin developも同じ結果になるかと思ったのですが、なぜgit pull origin HEADだとpullされないのでしょうか?
回答: > > HEADはいまいるブランチを指しているという理解だったので > > > ~~確かにいまいるブランチを指しているのですが、 より正確に言うと、いまいるブランチの最新の`リビジョン`を指しているので、 pull により実行されるマージで、新たなマージが発生することがないためと思われます 一方で、ブランチ名を指定した場合、 こちらは pull により新たなマージ (First Forward) が発生するので `Updating` と表示されます~~ bsdfan さんの回答を受けて確認したところ、 たしかにリモートブランチの HEAD を pull してマージする動作になりました なので、`master` ブランチの方に新規リビジョンが追加されていると、 `develop` ブランチに `master` の新規リビジョンがマージされてしまい 想定されている結果とは異なる結果になります !Result: git pull origin HEAD 参考: DEFAULT BEHAVIOUR | Git - git-pull Documentation > > If explicit refspecs were given on the command line of git pull, they are all merged. > > > `git pull` コマンドの には通常、ブランチ名を入力します: 参考: Git - git-pull Documentation ``` git pull [] [ [...]] ``` > > can name an arbitrary remote ref > > (for example, the name of a tag) > > or even a collection of refs with corresponding remote-tracking branches > > (e.g., refs/heads/*:refs/remotes/origin/*), > > but usually it is the name of a branch in the remote repository. > > >