※この記事は徐々に更新していく可能性があります。
ちょくちょくSourcetreeの使い方について質問されることが多い。
極めて個人的な考えなのだけど、CLIでGit操作を頑張るよりも、GUIでGit操作をしたほうが間違いが少ないと考えているので、Sourcetreeなどのアプリを使うことをおすすめしている。
もちろんCLIでも良いのだけどネ。
Sourcetree
ATLASSIANの製品。
無料で使える割には高性能で安定しているように思う。
僕はここ5年ほどずっと愛用していて、困ったことはあまり※ない。
しかも設定を変更するだけで日本化も簡単。
下記からダウンロード可能。
執筆時点のVersionは 3.0.1
を利用。
※ものすごく大きなサイズのファイルを参照すると(indexすると)固まる事があるので、その場合だけCLIのgitを使っている。
アカウント設定
⌘,
→ アカウントタブを選択。
「追加/Add...」ボタンを選択。
GitHubを選択。
「接続アカウント/Connect Account」を選択。
Webブラウザが開くので、GitHubにログインする。(あるいはログインしていれば自動的にSourcetreeに戻る。
SSHを選択。
「保存/Save」を選択。
GitHubへのSSHログイン設定をしていれば、これだけでログイン完了。
clone
⌘+n
でリポジトリ一覧を開く。
「リモート/Remote」タブを選択。
(ログインに成功していれば)プライベートリポジトリー含めて一覧されるので、目的のリポジトリーを選択。
ディレクトリを選択してClone
。
git操作
操作でやることといえば、
- create branch
- commit
- push
- fetch
- pull
- checkout
- merge (merge commit)
このくらい。
一つづつ説明していく。
create branch
現在チェックアウトしているbranchから、子branchを作成する。
例えば、masterからdevelopを作成する場合はこのようにして「Create Branch」ボタンを選択する。
commit
変更箇所をindexに追加し、変更内容を記載して「Commit」を選択。
Commitと同時にリポジトリへPushする場合、「Push changes immediately to origin/branch-name」をチェックする。
push
Pushするbranchを選択する。
「Ok」を選択する。
fetch
fetchはリモートの変更内容をローカルにダウンロードするイメージ。
pull
現在チェックアウトしているbranchの変更を取り込む。
- Commit merged changes immediately
- Include messages from commits being merged in merge commit
- Create new commit even if fast-forward merge
- Rebase instead of merge (WARNING: make sure you haven't pushed your changes)
checkout
作業するbranchを変更する。
左のbranch一覧から、チェックアウトしたいbranchを選択。
merge (merge commit)
現在のbranchに、他branchの変更を取り込む。
基本的に親branchの変更を、作業branchに取り込む際に行う。
逆に、子ブランチを親branchにマージする際は、必ずPull Requestを行うようにし、何故当該の変更行われ、そして親branchにマージされたのかが後で追えるようにする。
【TODO】omiendの会社の「チーム開発におけるGitブランチの運用」としてまとめる。
「Merge」を選択。
現在のbranchに対してマージしたいbranchを選択。
「OK」を選択。
以下はお好みで。ただし、基本的に「すぐにマージした変更をコミットする/Commit merged changes immediately」くらいしか使ったことがない。
- すぐにマージした変更をコミットする/Commit merged changes immediately
- マージコミットでマージされるコミットからメッセージを読み込む/Include messages from commits being merged in merge commit
- fast-forward マージであっても新たにコミットを作成する/Create a commit even if merge resolved via fast-forward
- マージではなくリベースする(警告:変更をプッシュしていないことを確かめてください)/Rebase instead of merge (WARNING: make sure you haven't pushed your changes)
マージ完了。
尚、上記は競合/Conflictが発生している状態。
競合/Conflictの解消
競合/Conflictの解消はエディターなどで行う(あるいはお好きな競合解決ツール)。
競合/Conflictを解決した後は、通常のCommitの手順を踏めば良い。
競合解決結果をindexするのを忘れずに。