LoginSignup
15
20

More than 3 years have passed since last update.

【Git】SourceTreeのプルのオプションってなんなの?

Last updated at Posted at 2019-07-06

はじめに

SourceTreeでプルをするときに出てくるオプションってなんなの?って方向けの記事です。

環境

本記事用に利用した環境です。

  • OS : MacOSX HighSierra
  • SourceTree : 3.2.1
  • Git : 2.22.0

プルのオプション

スクリーンショット 2019-06-22 10.32.29.png
こいつらについてまとめていきます

すぐマージした変更をコミットする

このオプションはプルで変更を取り込んだ(git merge)後にすぐにコミットするオプション。
マージした後に何か変更を加えてコミットしたい場合などは、チェックを外すとよい。

なお、fast-forwardの場合は後述する「fast-forwardマージであっても新たにコミットを作成する」にチェックを入れない限りはこのオプションにチェックを入れても何も起こりません。

※ fast-forwardってなんなのさ?って方はこちらの記事が分かりやすいです。
https://yu8mada.com/2018/08/15/what-is-a-fast-forward-merge-in-git/


ちなみにコマンドだと

マージ後にコミットをすぐ"行わない"
git merge --no-commit 【マージ対象のブランチ】

# 例:リモートブランチの最新を取り込んで、すぐコミットしない
git merge --no-commit origin/master

コマンドの場合はオプション指定なしがすぐコミットとなっているため、
マージ後コミットをすぐ行わない場合は、--no-commitオプションを指定する。

マージコミットでマージされるコミットからメッセージを読み込む

このオプションはプルで変更を取り込んだ(git merge)際にマージされるコミットのコミットメッセージを読み込んで、コミットメッセージを作成するオプション。

yaruo.png

実際にやってみた
スクリーンショット 2019-06-22 12.56.51.png
ローカルリポジトリが遅れているシチュエーション。
ここで重要なのは、ローカルリポジトリに存在しない上2つのコミットのコミットメッセージ。

・Update test.編集1回目
・Update test.編集2回目

プルを押して...
スクリーンショット 2019-06-22 12.58.04.png
上3つのオプションにチェック。そしてプル。

※ このシチュエーションはfast-forwardのため「fast-forwardであっても新たにコミットを作成する」にチェックを入れないと、そもそもマージコミットが作られずコミットメッセージが確認できないためチェック
※ 「すぐにマージした変更をコミットする」はチェックを入れなくても、あとでコミットする際の入力欄にマージするコミットのメッセージが取り込まれているが、すぐ確認したいのでチェック

スクリーンショット 2019-06-22 12.58.25.png
マージコミットのコミットメッセージを確認すると、今回リモートから取り込んだ2つのコミットのコミットメッセージが含まれている。

後ほど見返した時、マージコミットを見ただけで何の修正がマージされたかが見てわかりやすくなる。

...これコマンドでやる方法をご存知の人がいたら教えて下さい。

fast-forwardマージであっても新たにコミットを作成する

名前の通り、fast-forwardでもマージコミットを作成します。

...がマージの時ならともかくPullの度にマージコミットを作るのはコミットログが汚れるので、特別必要な場面以外は利用しないことをおすすめします。

マージではなくリベースする(警告:変更をプッシュしていないことを確かめて下さい)

リベースを実行します。

リベースってなんやねんって人はこちらの記事が参考になります。
https://qiita.com/panti310/items/e0ec74b47c6c219f2a8b

変更をプッシュしていないことを確かめて下さいという警告が出ている通り、リベースを行うとコミット履歴が改ざんされます。
もしリモートリポジトリにPushしていて誰かが利用していると...。
手元のローカルリポジトリとリモートリポジトリの履歴が合わなくなって、なんもできねー!ってなります。

git reset --hard origin/【ブランチ】とかでローカルリポジトリをリモートリポジトリの内容に強制的にあわせたりしないといけなくなる)

といういろいろとめんどくさい操作なので、ちゃんと分かる人だけがやろう!

実際にやってみた
今回は以下のようなfeatureブランチをmasterブランチの最新にリベースするシチュエーションでやってみる
スクリーンショット 2019-07-06 12.48.21.png

「プル」を押下して
スクリーンショット 2019-07-06 12.48.51.png

プルするリモートのブランチでmasterを指定
プルするローカルのブランチはfeatureを指定

OKを押下すると、確認がでるのでOKで進める
スクリーンショット 2019-07-06 12.49.01.png

とすると、ちゃんとリベースされている。
スクリーンショット 2019-07-06 12.49.25.png

ここまではローカルリポジトリでのお話なので、リモートリポジトリにPushする必要があるけども...。
リモートのリポジトリとすでにコミット履歴が異なるため普通にPushを行っても弾かれる。
スクリーンショット 2019-07-06 13.08.37.png
強制Push(git push -f)を行う必要があるのですが...
SourceTreeのデフォルト設定では利用することができないので

こちらの記事を参考に強制Pushを行うとよいです。
https://qiita.com/block/items/380015fc66296300f9e9

重ね重ねリモートにPushしているブランチに行うのは十分な注意が必要ですので、注意してください。

ちなみにコマンドだと

# featureブランチに切り替え
git checkout feature
# masterを対象にリベース
git rebase master
# リモートリポジトリに強制Push
git push -f origin feature

以上になります。

15
20
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
15
20