参考:Git checkout and merge without touching working tree
Gitで、「作業ブランチの変更を別のブランチに反映する」という操作はmergeでおこなうことができます:
作業ブランチの名前をb1、作業ブランチの変更を反映したいブランチの名前をb2とします。

「b2にb1をマージする」ためには、普通
git checkout b2 # 一度b2をcheckoutして
git merge b1 # b1をマージ
としますが、なんらかの理由でcheckoutせずにb1をb2にマージしたいとします。
例えば、ファイルの変更を感知して自動ビルドを走らせる設定がしてある環境 (あるのか?) では、一度b2をcheckoutした段階でb1で追加/編集したファイルがワーキングディレクトリから消滅するので自動ビルドが走り、さらにb2にb1をマージした段階でも消滅したファイルが追加され自動ビルドが走ってしまいます。
これを避けるためには、直接b2にb1の変更を取り込もうとするのではなく、b1にb2の変更を取り込んでから、b2のコミットを進めてしまえば良い:
(1) b1にb2の変更を取り込む:
# b1上で
git merge b2
(2) b2をb1へfast-forwarding
# b1上で
git fetch . b1:b2
これでb2へcheckoutすれば、実際にはb1にb2をマージしたにもかかわらず、b2にb1をマージしたのと実質同様の操作が行えたことになります。
ポイントは、fetchはmergeと違い、対象元のブランチ/対象先のブランチを各々指定できることです。
ちなみに、最初の時点ですでにb2がb1へfast-forwarding merge可能である場合、(1)をおこなう必要はなく、いきなり(2)でOKです。

