最終更新日: 2026-07-24
TOP(About this memo)) > 一覧(Git) > push・pull・fetch
-uをつけておいた方がよい(上流ブランチについてはbranch_mergeを参照)。git push -f origin HEAD^:<ブランチ名>
git reset origin/xxx
push -fは共同作業ではあまり使わない方がよいかもしれない* - * - * - * - * - * - *
\ ↑
* origin/foobar
↑
remotes/origin/foobar
git fetchやgit pullで下記のようなメッセージが出る。Your branch and 'origin/foobar' have diverged,
and have 5 and 1 different commit each, respectively.
git reset --hard origin/foobarでリモート側に合わせる。git pull <リモートレポジトリ名> <ブランチ名>
は以下と同じ。git fetch <リモートレポジトリ名> <ブランチ名>
git merge <リモートレポジトリ名>/<ブランチ名> # git merge FETCH_HEAD でもOK
git pullを実行すると、今チェックアウトしているブランチの上流ブランチだけpullする。つまり以下。git pull <今いるブランチの上流ブランチ>
これは以下と同じ意味。git fetch <今いるブランチの上流ブランチ>
git merge <今いるブランチの上流ブランチのリモート追跡ブランチ>
feature-xxxのときにgit pull origin testとすると、feature-xxxにtestがマージされる(マージのされ方はbranch_merge参照)。git fetchする。Your local changes to the following〜と出た場合)git stash -u # まず作業ファイルを退避する
git stash list # 確認
git pull
git stash pop
git addしてからgit commitする。git fetch origin master
git reset --hard origin/master
git pullしてもマージされない場合git branch --set-upstream-to=origin/deployment deployment
git pushで-uをつけ忘れた場合などにも使える。設定後、再度git pullする。git pullでerror: cannot lock ref 〜のようなメッセージが出た場合
git remote prune origin
git fetchgit fetch origin +refs/heads/*:refs/remotes/origin/*と同じ意味。originの全てのheadsをremotes/origin以下に写すという意味。git pullするのと挙動が違うため、使うとしてもよく理解してから使った方がよい(IMO)。git pullするだけで済む気もするが、複数の作業者が同時に作業する場合は現実的ではない。git fetch origin master:masterでチェックアウトせずにfetchとマージができる(fast-forwardのみ。fast-forwardでない場合はエラーになる)。
git fetch
git checkout master # この時点でソースコードが切り替わり、環境に影響を与える可能性がある
git merge
git branch -D <ブランチ名>
git checkout <ブランチ名>
git fetch <リモートレポジトリ名> <ブランチ名>の動作git fetchは「リモートブランチの履歴を取り込む」コマンド。ローカルブランチ、インデックスや作業ツリーには変更を加えない。git fetchだけの場合(引数がない場合)、全てのリモート追跡ブランチのみが更新される(?)。FETCH_HEADに書き込まれる。リモート(origin):X-X-X-X(test)
ローカル :X(test)-X-X-X(origin/test) # リモート追跡ブランチが更新される
git fetch # 全てのリモートの更新をフェッチする
git merge origin/test
git branch -aで全てのブランチを表示すると、「remotes/origin/feature-a」のようにブランチ名の前にリポジトリ名が表示される。この「remotes/xxxx/xxxx」となっているブランチ名が「リモート追跡ブランチ」である。
* feature-a
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/feature-a
git checkout remotes/origin/feature-aのようなことはできない)。git fetchすることで取得する。remotes/origin/HEAD -> origin/masterは、リポジトリのデフォルトブランチを表す。例えばorigin/HEADがorigin/masterを指しているとき、git checkout -b test originとするとgit checkout -b test origin/masterと同じ意味になる。デフォルトブランチはgit remote set-headで変更できる。git push成功時には(上流ブランチとして設定されていれば)自動的に対応するリモート追跡ブランチの参照が更新される。上流ブランチが設定されていない場合は、git push -u origin masterなどの-uオプションで設定できる。# リモートのcool-featureブランチに対応する追跡ブランチを作成
git fetch origin cool-feature
# 自動的に同名のリモート追跡ブランチを起点にして、ローカルブランチを新規生成しチェックアウト
git checkout cool-feature
-bが必要な気もするが、fetchでリモート追跡ブランチ「origin/cool-feature」が作成されているため、自動的にそれを起点にしてローカルブランチの作成をしてくれる親切設計になっている。# ローカルブランチで変更を行ったcool-featureの状態を、対応する上流ブランチにpushする
git push
git push origin cool-feature」とする必要はない。cool-featureブランチの上流ブランチ(upstream branch)として「origin/cool-feature」が設定される。git checkout -b <branch> --track <remote>/<branch>と同じ動作。