はじめに
SourceTreeでプルをするときに出てくるオプションってなんなの?って方向けの記事です。
環境
本記事用に利用した環境です。
- OS : MacOSX HighSierra
- SourceTree : 3.2.1
- Git : 2.22.0
プルのオプション
##すぐマージした変更をコミットする
このオプションはプルで変更を取り込んだ(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
)際にマージされるコミットのコミットメッセージを読み込んで、コミットメッセージを作成するオプション。
実際にやってみた
ローカルリポジトリが遅れているシチュエーション。
ここで重要なのは、ローカルリポジトリに存在しない上2つのコミットのコミットメッセージ。
・Update test.編集1回目
・Update test.編集2回目
プルを押して...
上3つのオプションにチェック。そしてプル。
※ このシチュエーションはfast-forwardのため「fast-forwardであっても新たにコミットを作成する」にチェックを入れないと、そもそもマージコミットが作られずコミットメッセージが確認できないためチェック
※ 「すぐにマージした変更をコミットする」はチェックを入れなくても、あとでコミットする際の入力欄にマージするコミットのメッセージが取り込まれているが、すぐ確認したいのでチェック
マージコミットのコミットメッセージを確認すると、今回リモートから取り込んだ2つのコミットのコミットメッセージが含まれている。
後ほど見返した時、マージコミットを見ただけで何の修正がマージされたかが見てわかりやすくなる。
...これコマンドでやる方法をご存知の人がいたら教えて下さい。
##fast-forwardマージであっても新たにコミットを作成する
名前の通り、fast-forwardでもマージコミットを作成します。
...がマージの時ならともかくPullの度にマージコミットを作るのはコミットログが汚れるので、特別必要な場面以外は利用しないことをおすすめします。
##マージではなくリベースする(警告:変更をプッシュしていないことを確かめて下さい)
リベースを実行します。
リベースってなんやねんって人はこちらの記事が参考になります。
https://qiita.com/panti310/items/e0ec74b47c6c219f2a8b
変更をプッシュしていないことを確かめて下さいという警告が出ている通り、リベースを行うとコミット履歴が改ざんされます。
もしリモートリポジトリにPushしていて誰かが利用していると...。
手元のローカルリポジトリとリモートリポジトリの履歴が合わなくなって、なんもできねー!ってなります。
git reset --hard origin/【ブランチ】
とかでローカルリポジトリをリモートリポジトリの内容に強制的にあわせたりしないといけなくなる)
といういろいろとめんどくさい操作なので、ちゃんと分かる人だけがやろう!
実際にやってみた
今回は以下のようなfeatureブランチをmasterブランチの最新にリベースするシチュエーションでやってみる
プルするリモートのブランチでmasterを指定
プルするローカルのブランチはfeatureを指定
ここまではローカルリポジトリでのお話なので、リモートリポジトリにPushする必要があるけども...。
リモートのリポジトリとすでにコミット履歴が異なるため普通にPushを行っても弾かれる。
強制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
以上になります。