同期と複数リポジトリ

フェッチ、プル、プッシュ

プル

ドロップダウンから選べる 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 もここで走らせたものと同じに数えます。

書き換えられた履歴 を見つけたフェッチは、そう言います。トーストがブランチ名を 示し、その行にはマーカーが付いて、以前指していたコミットちょうどの位置で それ以降の変更 を開けます。

複数のリポジトリをまとめて

  • グループタブは配下のサブツリー全体を すべてフェッチ / すべてプル できます。
  • ミッションコントロール はワークスペース全体でそれを行い、 実際に遅れているリポジトリ だけ をプルすることもできます。

リモート

個々のリモートの追加、編集、削除、フェッチはサイドバーからできます。ブランチの行に はリモートごとの存在バッジが付くので、どのリモートがそのブランチのコピーを持ってい るかが一目でわかります。

リモートがない状態でのフェッチ、プル、プッシュ は、空振りで成功する代わりに 同じ「リモートを追加」ダイアログを開きます。フェッチ、プル、プッシュ を参照。

関連項目: ミッションコントロール · ホスティングとプルリクエスト

この翻訳を GitHub で改善