Help us understand the problem. What is going on with this article?

SourceTreeで、マージとリベースを行う

More than 1 year has passed since last update.

SourceTreeでGitを操作する際にGUI上で「あれ、どれを選択状態にして、どっちを右クリックしてマージするんだっけ??」などと操作に戸惑うことがちょくちょくあります。。コマンドでやればイイじゃんって話なのですが、ターミナルに慣れてない人がGUIでやりたいってニーズもあるようで、、。

ということで、マージとリベースについて、コマンドに対応するSourceTreeのオペを整理しておきます。

develop「に」feature/dev_#60「を」マージする

フィーチャーブランチで作業してて、作業が終わったのでdevelopにマージしようって時のオペ。具体的にはdevelop上での

# git merge --no-ff feature/dev_#60

このオペです

この状態を、
01.png

この状態にするのが目標です。
02.png

あ、ちなみに、developへのマージをプルリクエストで行う開発スタイルの場合は、もちろんコマンドやSourceTreeではなく、GitHub上でプルリクを発行してください。。

まずはこのコミット済み環境を整備

このテストを実施するための環境を作ります。

Gitリポジトリの初期化

mkdir sample && cd $_
git init

Calc.java/Calc2.javaを作成し、masterブランチでコミットします。そのあと必要なブランチを作成します。

echo "hello" >> Calc.java
echo "hello" >> Calc2.java
git add Calc.java && git add Calc2.java   && git commit -m 'initial'
git checkout -b develop && git checkout -b feature/dev_#50 && git checkout -b feature/dev_#60

feature/dev_#60 と feature/dev_#50 でそれぞれ修正してコミット

git checkout feature/dev_#60
echo "hello from feature/dev_#60" >> Calc.java
git commit -a -m '消費税対応1.05倍 #60 2016/12/26'

git checkout feature/dev_#50
echo "hello from feature/dev_#50" >> Calc2.java
git commit -a -m '消費税対応1.08倍 #50 2016/12/26'

git checkout develop

SourceTreeを通してみてみると、、

2e10b4c1-86f1-05c1-609f-dc74534b2fc6.png

初めのキャプチャと同じになりました。。。
何度もやり直してみる場合は、

rm -fr .git
rm *.java

してなかったことにして、git initからやり直せばOKです。

さてやってみましょう。

コマンドで

$ git branch
* develop
  feature/dev_#50
  feature/dev_#60
  master
$ git merge --no-ff feature/dev_#60
Already up to date!
Merge made by the 'recursive' strategy.
$ git branch
* develop
  feature/dev_#50
  feature/dev_#60
  master
$
$ git log --oneline --graph
*   2be95c9 (HEAD -> develop) Merge branch 'feature/dev_#60' into develop
|\
| * 72bafd1 (feature/dev_#60) 消費税対応1.05倍 #60 2016/12/26
|/
* 0ad8ea7 (master) initial
$

feature/dev_#60 ブランチを develop ブランチにマージすることができました。

SourceTree上で見てみるとこんな感じ。
02.png

SourceTreeで

さて本題のSourceTreeでのオペです。
develop をダブルクリックしてcheckoutして(太字状態)、dev_#60 を右クリックして「dev_#60 を developへマージ」を選択します。
03.png

Fast Forwardになってしまいましたが、とりあえずマージはできたようです。
04.png

ちなみにFast Forwardにならないようにするには、環境設定で「fast-forwardでマージに問題がなくてもコミットを作成」にチェックを入れておけばよいようです。
05.png

feature/dev_#50「に」develop「を」リベースする

次はリベースです。dev_#60が先にマージされてdevelopが進んでしまったため、その「(dev_#60修正分の)developの変更」を自分のブランチ(dev_#50) へリベースするシーンを想定します。

下記のように、dev_#50よりdevelopが進んでる状況ってことですね。
06.png

コマンドで

$ git branch
  develop
* feature/dev_#50
  feature/dev_#60
  master
$ git rebase develop
First, rewinding head to replay your work on top of it...
$ git branch
  develop
* feature/dev_#50
  feature/dev_#60
  master
$ git log --oneline --graph
*   325aedc (HEAD -> feature/dev_#50, develop) Merge branch 'feature/dev_#60' into develop
|\
| * 72bafd1 (feature/dev_#60) 消費税対応1.05倍 #60 2016/12/26
|/
* 0ad8ea7 (master) initial
$

下記の通り、developの変更分がdev_#50に取り込まれ、リベースすることが出来ました。
07.png

SourceTreeで

SourceTreeでは以下の通り。
dev_#50をダブルクリックしてcheckoutして(太字状態)、developを右クリックして「現在の変更を developへリベース」を選択します。
08.png

コマンドと同じ結果が得られました。
09.png

おつかれさまでした。

関連リンク

masatomix
JavaEEの開発やリッチクライアント開発のアーキテクトが専門でしたが、最近はRPAとAIがメイン。。。RPAはUiPathとOrchestratorの構築が中心です。 FirebaseとかOAuth/OIDCなど新しいモノ、あと数学もすき。 最近は UiPath Friends っていうユーザコミュニティにも関わってます。 あ、UiPath Japan MVP 2019,2020 す。
primebrains
プライム・ブレインズは、マネジメントスキルだけでなく、最新のITスキルを兼ね備えた技術者がお客様の立場でお客様と共に、成功に向けてプロジェクトを推進します。
http://www.primebrains.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away