フェッチ、プル、プッシュ
プル
ドロップダウンから選べる 3 つのモードがあります。既定、fast-forward のみ、 リベース です。ローカルの変更はプルの前後で自動的にスタッシュされて戻されるの で、作業ツリーが汚れていても止められません。
何も追跡していないブランチ
git pull はフェッチのあとにマージを行うもので、そのマージには どこへ 取り込むか
——ブランチの上流——が必要です。ローカルで作ったブランチや、追跡設定なしでチェック
アウトしたブランチには、それがありません。フェッチ自体は成功し、更新された
origin/* の長い一覧が流れたあと、git は "There is no tracking information for
the current branch" で止まります。何もプルされておらず、壊れてもいません。後半に
対象がなかっただけです。
Gitcito はこのエラーを読み取り、修復をボタンとして提示します。どちらを出すかは、 リモートに既にそのブランチがあるかで決まります。
| リモートにある | 紐づけてプル — 上流を <リモート>/<ブランチ> に設定し、続けて要求どおりのプルを実行します。⌘Z で取り消せます(追跡設定を再び外します)。 |
| まだない | ブランチをプッシュ — 通常のプッシュで、ついでに上流も設定されます。 |
提示されるリモートは origin があればそれ、なければ一覧の先頭です。どちらの状況か
はネットワークではなくリモート追跡 ref から読むので、答えは直前に走ったフェッチを
反映します。
プッシュ
強制プッシュは常に --force-with-lease を使います。最後に見たときからリモートが動
いていたら拒否する、安全な方の変種です。保護ブランチ への強制プッシュは確認を
求めます(一覧はリポジトリ設定の歯車にあります)。

リモートがないとき
プッシュ、プル、フェッチには行き先が要ります。ひとつもないリポジトリ — できたば
かりの git init、origin を外したクローン — では、これらのボタンは何もしないか、
空のフェッチを成功扱いにしていました。いまは警告つきで リモートを追加 が開
き、URL を貼るかホスト上にリポジトリを作れます。追加すると始めた操作が続きま
す。プッシュは現在のブランチを公開し、プルはフェッチしてからプルし、フェッチは
フェッチだけします。
バックグラウンドの自動フェッチは、取るものがなければ黙っています。時計回りに ダイアログは開きません。
リモートが複数あるとき
プッシュ ボタンはブランチの上流を対象にします。その隣の矢印は、リポジトリに リモートが 2 つ以上あるときに次のものも提示します。
| 1 つのリモートへプッシュ | リモートを 1 つ選びます — フォーク、ミラー、デプロイ先 |
| N 個すべてのリモートへプッシュ | リモートごとに 1 回ずつ、順番にプッシュ |
| すべてのタグをプッシュする先 | git push <remote> --tags、ローカルのタグを一度に全部 |
同じ 2 つのアクションは、サイドバーの各リモートの行にも並んでいます。この疑問が出 てくるとき、たいていあなたはそこにいるからです。
1 つ拒否されても、残りは中止されません。 フォークとその上流にプッシュするのは まさに、片方が拒否してももう片方は通ってほしいケースです。だからリモートごとに別々 に報告します。成功したものは 1 つのトーストにまとめて名前が並び、失敗はそれぞれが git の理由つきで自分のトーストを持ちます。
ブランチの上流を設定するのは、リストの 最初の リモートだけです。ブランチの上流 は 1 つであり、最後にプッシュしたリモートが、あなたが追跡させたいものとは限りませ ん。
どちらの経路も普通のプッシュと同じチェックを通ります — 保護ブランチの確認と シークレットガード です。2 つのリモートへ公開することは、露出が 2 倍 になることであって、注意が半分でよくなることではありません。
チェックアウトしていないブランチ
git pull は HEAD しか動かしません。ほとんどのクライアントがブランチを追いつかせる
前にチェックアウトを求めるのはそのためです。Gitcito は求めません。サイドバー、または
グラフ のバッジ上で任意のローカルブランチを右クリックすると、
<ブランチ> をプル と <ブランチ> をプッシュ が出ます。どちらも
チェックアウト中のブランチではなく その ブランチに対して働きます。
<ブランチ> をプル |
チェックアウトせずに、ローカル ref を上流へファストフォワードします。作業ツリーには触れません。⌘Z で取り消せます — 取り消すとブランチは元の位置に戻ります。 |
<ブランチ> をプッシュ |
そのブランチの通常のプッシュ。ツールバーのボタンと同じ保護ブランチ確認と シークレットガード が働きます。 |
何も追跡していないブランチではプルは無効です — 取ってくる先がありません。いま 立っている ブランチでは、どちらも通常のプルにフォールバックし、作業ツリーも 更新されます。
知っておくべき限界: 上流から 分岐した ブランチは拒否され、その旨が 表示されます。分岐の解消はマージかリベースであり、どちらも作業ツリーを必要と します。つまりその場合だけはチェックアウトが必要です。リモートがプッシュを 拒否したときは、立っていないブランチでも強制プッシュは提示されますが、 「プルして再試行」の道は同じ理由で提示されません。
フェッチ
フェッチ はツールバーにプルの隣で独立したボタンを持ちます。すべてのリモートから
取得して prune するので、origin/* の ref も先行/遅れのカウントもすべて最新になり
——それでいてブランチにもワーキングツリーにも触れません。自分の作業を動かさずに、
ほかの人が何をしたかを 見たい ときのボタンです。
指定した間隔でのバックグラウンド 自動フェッチ(設定 → 一般)もあります。フェッチ
ボタンにカーソルを載せると、その下に経過時間がふわりと現れ——4 分前——十五分を
過ぎていれば琥珀色になります。ツールバーの場所は一切取りません。ボタンに手を伸ばす
ときにしか浮かばない問いへの答えだからです。FETCH_HEAD から読むので、ターミナルで
走らせた git fetch もここで走らせたものと同じに数えます。
書き換えられた履歴 を見つけたフェッチは、そう言います。トーストがブランチ名を 示し、その行にはマーカーが付いて、以前指していたコミットちょうどの位置で それ以降の変更 を開けます。
複数のリポジトリをまとめて
- グループタブは配下のサブツリー全体を すべてフェッチ / すべてプル できます。
- ミッションコントロール はワークスペース全体でそれを行い、 実際に遅れているリポジトリ だけ をプルすることもできます。
リモート
個々のリモートの追加、編集、削除、フェッチはサイドバーからできます。ブランチの行に はリモートごとの存在バッジが付くので、どのリモートがそのブランチのコピーを持ってい るかが一目でわかります。
リモートがない状態でのフェッチ、プル、プッシュ は、空振りで成功する代わりに 同じ「リモートを追加」ダイアログを開きます。フェッチ、プル、プッシュ を参照。
関連項目: ミッションコントロール · ホスティングとプルリクエスト