短い答え
早送りマージを実行している限り、次のコマンドを使用できます
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
(非)早送りマージの構文
必要であればfetch
更新は非早送りである場合、コマンドは失敗し、その後、あなたは、単にフォームのrefspecを使用します
git fetch <remote> <remoteBranch>:<localBranch>
早送り以外の更新を許可する場合+
は、refspecの前にa を追加します。
git fetch <remote> +<remoteBranch>:<localBranch>
次のコマンドを使用して、ローカルのリポジトリを「リモート」パラメータとして渡すことができます.
。
git fetch . <sourceBranch>:<destinationBranch>
ドキュメンテーション
git fetch
この構文を説明するドキュメントから(私の強調):
<refspec>
<refspec>
パラメータの形式は、オプションのプラス+
、ソース参照<src>
、コロン:
、宛先参照の順<dst>
です。
一致するリモート参照<src>
がフェッチされ、<dst>
空の文字列でない場合は、それに一致するローカル参照がを使用して早送りされ<src>
ます。オプションのプラス+
が使用されている場合、ローカルrefは、早送り更新にならない場合でも更新されます。
こちらもご覧ください
作業ツリーに触れずにGitチェックアウトとマージ
作業ディレクトリを変更せずにマージする