Skip to content

Instantly share code, notes, and snippets.

@sunaot
Last active November 2, 2015 10:51
Show Gist options
  • Save sunaot/f4c266b06dde4f1d4d46 to your computer and use it in GitHub Desktop.
Save sunaot/f4c266b06dde4f1d4d46 to your computer and use it in GitHub Desktop.
git push & git pull

git pull の動作

pull は引数なしが推奨です。 pull は誤った (意図しない) リモートリポジトリやブランチを指定したときも動いて、そのリポジトリのリモートブランチから展開されているワークツリーへのマージとして働きます。一方、引数省略するとリモート追跡ブランチから自動的に pull 対象を決定します。こちらのほうが一般的に事故は少ないです。

git push の動作

こちらは git のバージョンしだいで推奨が変わって、次のようにわかれます。

git v2.0 以上

引数なしが推奨。引数なしの場合、default の挙動となり、simple が選択されます。

git v2.0 未満

グローバルの gitconfig (リポジトリごとの設定ではなく $HOME/.gitconfig) を default: simple に設定しましょう。

git config --global push.default simple

git v1.8 未満

upstream を...というよりも、git のバージョンを最新に上げましょう。


ちなみに、必要ないのに引数を指定した場合、意図しないブランチに対して push をしかけてリモートブランチの内容を壊します (その名前のローカルブランチにまだ送ってはいけない変更が入っていた場合。current ブランチを指定リモートブランチに push するわけではないです)。ご注意を。

また、古いバージョンにおいてもっとも危険なのは、git push -f (引数指定なし) です。git push の正しい意味は、手元にあるブランチを 全て リモートに対して push するというものです。v1.8 以降は push.default のオプションが設定されていない場合に警告を出してくれますが、v1.8 未満は確認なくローカルブランチの同名のリモートブランチに対して push をしかけます。force オプションがついた場合、リモートの内容と歴史がコンフリクトしたときにはローカルの歴史を正として強制上書きをします。この場合、ブランチの生成された経緯などによらず名前でぶつけて対応するものを上書きとなります。もう要らなくなっていく知識ですので、覚えなくていいように一切の躊躇なく最新の git を使うようにしましょう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment