LoginSignup
98
104

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-09-25

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

おつかれさまでした。

関連リンク

98
104
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
98
104