短い答え
早送りマージを行っている限り、単純に使用できます
git fetch <remote> <sourceBranch>:<destinationBranch>
例:
# Merge local branch foo into local branch master,
# without having to checkout master first.
# Here `.` means to use the local repository as the "remote":
git fetch . foo:master
# Merge remote branch origin/foo into local branch foo,
# without having to checkout foo first:
git fetch origin foo:foo
アンバーの答えは早送りの場合にも機能しますが、代わりにこの方法で使用するgit fetch
と、ブランチ参照を強制的に移動するよりも少し安全git fetch
です+
。 refspec.
長い答え
非早送りマージになる場合は、最初に A をチェックアウトしないと、ブランチ B をブランチ A にマージできません。これは、潜在的な競合を解決するために作業コピーが必要なためです。
ただし、早送りマージの場合、定義上、このようなマージでは競合が発生しないため、これは可能です。最初にブランチをチェックアウトせずにこれを行うにはgit fetch
、refspec を使用できます。
別のブランチをチェックアウトしたmaster
場合の更新 (早送り以外の変更を許可しない)の例を次に示します。feature
git fetch upstream master:master
このユースケースは非常に一般的であるため、次のように git 構成ファイルでエイリアスを作成することをお勧めします。
[alias]
sync = !sh -c 'git checkout --quiet HEAD; git fetch upstream master:master; git checkout --quiet -'
このエイリアスの機能は次のとおりです。
git checkout HEAD
: これにより、作業コピーが切り離された状態になります。master
これは、たまたまチェックアウトしている間に更新したい場合に便利です。そうしないと のブランチ参照master
が動かないので、やる必要があったと思いますが、それが本当に頭の中で正しいかどうかは覚えていません。
git fetch upstream master:master
master
: これにより、ローカルが と同じ場所に早送りされupstream/master
ます。
git checkout -
以前にチェックアウトしたブランチをチェックアウトします (-
これがこの場合の動作です)。
git fetch
for (non-)fast-forward マージの構文
fetch
更新が早送りでない場合にコマンドを失敗させたい場合は、次の形式の refspec を使用するだけです。
git fetch <remote> <remoteBranch>:<localBranch>
非早送り更新を許可する場合+
は、refspec の前に a を追加します。
git fetch <remote> +<remoteBranch>:<localBranch>
次を使用して、ローカルリポジトリを「リモート」パラメーターとして渡すことができることに注意してください.
。
git fetch . <sourceBranch>:<destinationBranch>
ドキュメンテーション
git fetch
この構文を説明するドキュメントから(強調鉱山):
<refspec>
パラメータの形式<refspec>
は、オプションのプラス+
、その後にソース ref <src>
、コロン:
、宛先 ref が続きます<dst>
。
一致するリモート ref<src>
がフェッチされ、<dst>
が空の文字列でない場合は、一致するローカル ref が を使用して早送りされ<src>
ます。オプションのプラス+
を使用すると、早送り更新にならなくても、ローカル ref が更新されます。
関連項目
ワーキングツリーに触れずにGitのチェックアウトとマージ
作業ディレクトリを変更せずにマージする