概要
忘れないうちにメモメモ。今まで知りませんでした・・w
git で マージする際、通常はマージ先のブランチに checkout (switch) して
そこから git merge xxxx
ってやると思いますが、ちょこちょこマージしながら
進めていきたいときもあります。そういうときに毎回 ブランチ を切り替えているとちょっとめんどくさい。。
そんなときは以下のようにすると移動せずにマージできます。ただし、Fast-Forward限定です。
$ git fetch . srcブランチ:destブランチ # srcブランチは、今からマージしたいブランチ。 # destブランチは、マージを受け入れるブランチ。
.
を指定しているのがミソですね。 通常 git fetch <remote>
を示す部分を .
にするとローカルをリモートとして設定するみたいな意味になります。
これで、FFマージが可能な場合はそのままマージができちゃいます。
試してみる
ちょっと試してみましょう。
$ cd $HOME $ mkdir -p tmp/gittest && cd tmp/gittest $ git init $ echo 'helloworld' >> a.txt $ git add . $ git commit -m "Add a.txt" $ git switch -c add-b $ echo 'HELLOWORLD' >> b.txt $ git add . $ git commit -m "Add b.txt" # ブランチを移動せずにマージしてみる $ git branch * add-b master $ git fetch . add-b:master From . 35bb6ce..3688820 add-b -> master
おー、ちゃんとできましたね。
では、今度は Fast-Forward マージができない状態で git fetch . src:dest
するとどうなるかを確認
$ ls a.txt b.txt $ git branch * master # a.txt を master で、b.txt を upd-b ブランチで変更 $ git switch -c upd-b $ sed -i -e 's/ELLO/ello/' b.txt $ git add . $ git commit -m "Upd b.txt" $ git switch master $ sed -i -e 's/ello/ELLO/' a.txt $ git add . $ git commit -m "Upd a.txt" # 再度、upd-b ブランチに戻る $ git switch upd-b # マージ実行 $ git fetch . upd-b:master From . ! [rejected] upd-b -> master (non-fast-forward) # # 予想通り、Fast-Forward マージにならないのでリジェクトされた。 # # なので、masterブランチの差分を自身に先に適用してコミットラインをきれいに。 $ git rebase master Successfully rebased and updated refs/heads/upd-b. # これでコミットラインが一直線になったので、改めて実行 $ git fetch . upd-b:master From . f9eea1e..3632a29 upd-b -> master # # オッケイ # # master に切り替えて確認 $ git switch master $ git log --oneline 3632a29 (HEAD -> master, upd-b) Upd b.txt f9eea1e Upd a.txt 3688820 Add b.txt 35bb6ce Add a.txt # # オッケイ # # # このリポジトリ、もういらないのでグッバイ # $ cd $HOME $ rm -rf tmp/gittest
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場