git pull

リモートの新しいコミットを取り込み、手元のブランチを最新にする。

実行前の状態

自分が README.md を 1 回コミットして送ったあと、ほかの人が先にコミットを 1 つ送った場面です。リモートにだけ新しいコミットがあり、それを手元に取り込みたいときに打ちます。

この状態を手元で作るなら、次の順に打ちます。リモートは手元に作った受け皿 (origin.git) で、ほかの人は別のフォルダ (friend) で見立てます。

ターミナル

git init -q --bare -b main origin.git
git init -q -b main hello
cd hello
echo "# hello" > README.md
git add README.md
git commit -q -m "README を作る"
git remote add origin ../origin.git
git push -q -u origin main
cd ..
git clone -q origin.git friend
cd friend
echo "friend" > friend.txt
git add friend.txt
git commit -q -m "friend.txt を足す"
git push -q
cd ../hello

最小の例と結果

ターミナル

git pull
From ../origin
   a1b2c3d..9f8e7d6  main       -> origin/main
Updating a1b2c3d..9f8e7d6
Fast-forward
 friend.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 friend.txt
  • From ../origin は取り込み元です。
  • main -> origin/main は、リモートの main の新しい分を、手元にある origin/main (リモートの様子の控え) へ写したという意味です。
  • Fast-forward は、手元に別のコミットが無かったので、ブランチをそのまま前へ進めたという意味です。
  • friend.txt | 1 + は、取り込んだコミットで足された物です。

成功の確認

履歴の一番上に、取り込んだコミットがあれば入っています。

ターミナル

git log --oneline
9f8e7d6 friend.txt を足す
a1b2c3d README を作る

ターミナル

git status -sb
## main...origin/main

git status -sb の 1 行目に [behind 1] が出ていなければ、リモートに追いついています。

構文と主要オプション

書き方すること
git pull送り先を決めてあるブランチの新しい分を取り込み、手元のブランチへまとめる
git pull --ff-only前へ進めるだけで済むときだけ取り込む。手元にも別のコミットがあれば何もせず止まる
git pull --no-rebase手元と相手の両方のコミットを、まとめるコミットを作って取り込む
git pull --rebase手元のコミットを、取り込んだ分の後ろへ付け替えて取り込む。送る前のコミットだけに使う
git pull origin <ブランチ名>指定したブランチを取り込む

git pull は、リモートの新しい分を取りに行く git fetch と、手元へまとめる git merge を続けて打つコマンドです。--rebase を付けたときや、pull.rebase の設定が有効なときは、git merge の代わりに git rebase が走ります。取り込む前に中身を見たいときは、git fetch だけを打ちます。

失敗時の戻し方

pull は、手元のブランチを動かします。取り込む前の位置は ORIG_HEAD という名前で残るので、取り込みを取り消したいときはそこへ戻します。

ターミナル

git reset --hard ORIG_HEAD

--hard は、作業中のファイルの変更まで消します。pull の前に、変更をコミットしてあるか、git status で変更が無いことを確かめてから打ちます。

衝突が出たとき

取り込みの途中で衝突すると、pull は途中で止まります。衝突したファイルを直して git add し、merge で取り込んでいるなら git commit で終わらせます。--rebase で取り込んでいるなら、git rebase --continue で続けます。やめたいときは、取り込む前の状態に戻します。

ターミナル

git merge --abort

git pull --rebase で衝突したときは、代わりに git rebase --abort を使います。

よくある疑問

You have divergent branches と出て、止まります

手元にもリモートにも、お互いにない別のコミットがあります。どう取り込むかを決めないと、pull は進みません。

ターミナル

git pull
fatal: Need to specify how to reconcile divergent branches.

この前に出る hint の行は省いています。

2 つをまとめるコミットを作って取り込むなら、git pull --no-rebase と打ちます。メッセージを書くエディタが開いたら、そのまま保存して閉じます。まだ push していない手元のコミットだけを付け替えたいなら git pull --rebase です。

pull と fetch は何が違いますか

fetch は、リモートの新しい分を手元の控え (origin/main など) へ写すだけで、自分のブランチは動かしません。pull は、そのあと自分のブランチへまとめるところまで進みます。

There is no tracking information for the current branch と出ます

そのブランチは、取り込み元を決めていません。git pull origin main のように、元を書いて打ちます。

確かめた Git の版 2.50.1 (Apple Git-155)確認日 2026年10月17日正本は Git 公式マニュアル (英語)

Git コマンド辞典の索引へ戻る