#はじめに
本記事はGit操作を行う際に、SourceTreeではどういった操作になってコマンド操作ではどういった操作になるかまとめたものです。
とりあえず必要になったものをまとめているので全操作ではありません
#本記事の対象者
・Gitを普段コマンド操作で使っているけれど、SourceTreeは分からない方
・Gitを普段SourceTreeで使っているけれど、コマンド操作は分からない方
#背景
現在の現場で、Gitを運用しているのですがコマンドライン派と、SourceTree派が混在していました。
その際にSourceTreeを使うメンバーから、**「これってどうやればいいの?」って聞かれた時に「あれ?これってSourceTreeでどうやるの?」**と分からずその場は結局コマンド操作で解決してしまい、SourceTreeでの対処法が伝えられませんでした。
というのが契機で、両方の操作を覚えなければならぬと思い立ち、調べたのでまとめます。
#環境
本記事用に利用した環境です。
- OS : MacOSX HighSierra
- SourceTree : 3.2.1
- Git : 2.22.0
#アウトライン
- リモートリポジトリの取得(git clone)
- ファイルをステージングに移動(git add)
- コミット(git commit)
- リモートリポジトリに反映(git push)
- リモートリポジトリの情報を取得(git fetch)
- リモートリポジトリの修正取り込み(git pull)
- ブランチの作成(git checkout -b)
- ブランチのマージ(git merge)
#各種操作
##リモートリポジトリの取得(git clone)
何をするにもまずはリポジトリを落としてこないと作業が始まりませぬ。
SourceTree
1. SourceTreeを起動して、メニューバー > 新規
3. 情報を入力
ソースURL ... クローンするリモートリポジトリのURL
保存先のパス ... クローンするリモートリポジトリの保存先ディレクトリ
名前 ... クローンしたリポジトリのSourceTree上で論理名
コマンド
git clone 【リモートリポジトリのURL】
# 例:テスト用のリモートリポジトリを取得
git clone https://github.com/hassoubeat/test_repo.git
##ファイルをステージングに移動(git add)
編集が完了したらコミットするファイルをステージングに移動するのだ!(ハム太郎)
SourceTree
方法はいくつかあります。
方法1. ステージングに未登録のファイルから、チェックを入れる
ステージングに未登録のファイル横のチェックを入れると、全変更ファイルがステージングに移動するゾ
方法2. ファイルをステージングに移動 or Hunkをステージングに移動
※ Hunk ... 変更した範囲という意味
コマンド
git add 【コミット対象のファイル】
# 例:変更したtest.txtをadd
git add test.txt
##コミット(git commit)
SourceTree
2. コミット対象の確認 > コミットメッセージ記述 > コミット
コマンド
git commit
コマンド実行後、デフォルトのエディタが起動してコミットメッセージを記述できる。
vimエディタが起動しているので、:wqで保存するとそこまで書いていたコミットメッセージでコミットされる
###※コマンドラインでGitの現在の状況確認(git status)
git status
SourceTreeを使っているとGitの現在の状況が常に見えていますが、コマンドライン上ではコマンドを打たないと確認できません。
コマンドラインからコミットを行う前はgit status
を実行して、誤ったブランチにコミットしないか、想定したファイル以外ステージングに取り込まれていないか...といった確認をしよう
(私はぶっちゃけ見づらいと思うので、状況確認はSourceTreeやVScodeのGitから確認しています)
##リモートリポジトリに反映(git push)
###コマンド
git push origin 【反映するリモートリポジトリ】
# 例:masterリポジトリに変更をpush
git push origin master
##リモートリポジトリの情報を取得(git fetch)
自分以外の誰かがリモートリポジトリにpushしているかもしれない...。
でもすぐpullで取得はしたくなくて、最新のコミットがあるかだけ確認したい...。
という時は
###SourceTree
最新情報を取得したい場合は、左上のフェッチ
SourceTreeはデフォルトの設定だと、裏で定期的にリモートリポジトリから最新情報の取得(git fetch)
を行っています。
(上記画像も自動で最新情報を取得しており、origin/master(リモート)
に最新のコミットがあったため、一つコミットが先に進んでいる)
###コマンド
git fetch
##リモートリポジトリの修正取り込み(git pull)
上述の最新状況の取得(git fetch)
で最新の状況を取得・確認して、問題がなければ変更を取り込む。
###SourceTree
1. 左上のプル
git fetch
をしてリモートリポジトリに最新のコミットがあった場合は、プルボタンに更新があるコミットの数バッチが表示される
2. 取り込みのアレコレ確認
・プルする元のリポジトリ:最新を取ってくる対象のリポジトリ
・プルするリモートのブランチ:最新を取ってくる対象のブランチ
・プルするローカルのブランチ:上記のリポジトリ・ブランチから取得した最新を取り込むローカルブランチ
ここではorigin/masterブランチから取得した最新を、ローカルのmasterブランチに取り込むという内容になっている。
オプションの詳細は後述するが、特に意図がなければすべてチェックを外した状態でのプルを推奨する。
###コマンド
git pull
引数なしで、現在のブランチに対応するリモートブランチから最新を取得する。
実はgit pull
は以下のコマンドをまとめただけのコマンド
git fetch
git merge origin/master
内容的には最新状況を取得した後、リモートブランチからmergeをしているだけ。
###pullのオプションについて
【Git】SourceTreeのプルのオプションってなんなの?
##ブランチの作成(git checkout -b)
###SourceTree
1. 左上のブランチ
2. 作成するブランチの情報入力
・新規ブランチ...新しく作成するブランチの名前
・コミット...新しく作成するブランチを枝分かれ元となるコミットの選択
作業コピーの親 ... 現在チェックアウトしているブランチの最新
指定したコミット ... 好きなコミットから選択
・新規ブランチをチェックアウト ... 作成したブランチに移動(チェックアウト)する
入力後、「ブランチを作成」
左のメニューのブランチでfeatureブランチが追加されており、太字になっていることからチェックアウトされている。
###コマンド
git checkout -b 【作成したいブランチ名】
#例:featureブランチを作成
git checkout -b feature
現在のチェックアウトしているブランチを親としてブランチを作成する
##ブランチの切り替え(git checkout)
###SourceTree
masterブランチからfeatureブランチに切り替える。
###コマンド
git checkout 【切り替えたいブランチ名】
#例:featureブランチに切り替え
git checkout feature
##ローカルブランチの変更をリモートリポジトリに送信(git push)
###SourceTree
1.左上の「プッシュ」
新たに作成したfeatureブランチをリモートリポジトリに送信
3.リモートリポジトリにfeatureブランチが登録されている
次回以降も同様の手順で変更をリモートリポジトリに反映可能
###コマンド
# 初回のみ
git push -u origin【ブランチ名】
# 次回移行
git push origin【ブランチ名】
# 例:featureブランチをリモートリポジトリに登録(初回のみ)
git push -u origin feature
# 例:featureブランチの変更をリモートリポジトリに登録(初回以降)
git push origin feature
##リモートブランチをローカルブランチに取得(git checkout -b)
###SourceTree
1.リモートのfeatureブランチをローカルブランチに取得
2.新規ブランチの情報を設定してチェックアウト
基本そのまま
次のリモートブランチをチェックアウト:取得したいリモートブランチを指定
新規ローカルブランチ名:ローカルブランチの名前を指定
ローカルブランチでリモートブランチを追跡:リモートブランチとローカルブランチの紐付け
(チェックを外すと、独立したローカルブランチとなるためリモートブランチに変更を反映するなどが行えない)
###コマンド
git checkout -b 【ローカルブランチ名】 【リモートリポジトリ名】
# 例:
git checkout -b feature origin/feature
##ブランチのマージ(git merge)
マージを取り込みたいブランチに移動して、merge
###SourceTree
1. masterブランチにfeatureブランチの変更をマージする下準備
###コマンド
git merge 【マージ対象のブランチ】
# 例:masterブランチにfeatureブランチをマージ
git checkout master
git merge feature
また必要なものがでたら追加していきます。
記載内容に誤りがあったら、ご指摘いただけると助かります。