Git

ブランチを切り替えずにfast-forwardマージする

複数人開発中にremoteで進んだブランチにHEADを切り替えずにfast-forwardマージしたかったけど,
やり方がわからなかったので無理やり実行した話.

コマンド知ってる人教えてください.


gitコマンド

コメントでコマンド教えてもらいました.

$ git fetch github develop:develop


やりたいこと

スクリーンショット 2017-12-27 17.10.16.png

こんな感じでremoteの develop ブランチがコミットされたのでlocalの develop ブランチをfast-forwordマージしたい.
でも今は別のブランチで作業中なので,ブランチの切り替えはしたくない.
fast-forwardマージはマージ時に新しいコミットを作らず,ブランチのポインタの移動だけを行っているはずなので,
どうにかして developブランチ(図の青色の矢印)を指しているポインタをgithub/developブランチ(図の赤色の矢印)に移動させたい.

やったこと

git関連のファイルはリポジトリ内の .git ディレクトリ以下にある.
ブランチの位置はこの中の refs ディレクトリで管理されている.
refsディレクトリの構成はこんな感じ.

$ tree . 
 .
├── heads
│   ├── develop
│   ├── feature
│   │   ├── admin_faq
│   │   └── admin_car_option
│   └── master
├── remotes
│   └── github
│       ├── develop
│       ├── feature
│       │   ├── admin_faq
│       │   └── admin_car_option
│       └── selling-car-api
└── tags

gitのブランチに対応するファイルがある.
ファイルの中身は以下のような感じでコミットのSHA-1が保存されている.

$ cat refs/heads/develop
fe98e89d39747474e969131dac97bbb0dfe9427f

github/develop と同じ所を指すようにすればいいので
heads/develop ファイルを remotes/github/develop ファイルで上書き.

cp refs/remotes/github/develop refs/heads/develop

無事同じ位置に移動されました.
Kobito.cvgrv0.png