ソフトウェア & サービス
【Sourcetree】よくあるエラー問題の解決方法まとめ
ishii
以前当ブログにて「Sourcetree初心者向けの基本的なコミットとプッシュ」、「コミットやプッシュ先を間違えた場合の対処法」の記事を書いた所、どちらも多くのアクセス数をいただきました。
そこで、今回のテーマは操作方法の紹介第3段としてSourcetreeを使っていて開発中によく起こる問題と解決方法をご紹介します。
なお、この記事はコマンドに慣れていないWeb担当者向けに操作方法を紹介しています。
<操作環境>
・Sourcetreeバージョン4.2.2(日本語版)
・M1 Mac
<目次>
1. コンフリクトの解消方法
2. スタッシュの使い方
3. コミットメッセージのまとめ方
4. 特定のファイルの変更を追跡させないように設定する
1. コンフリクト(競合)の解消
Gitリポジトリで複数のメンバーが同時に作業する場合、コンフリクトが発生することがあります。
Sourcetreeではコンフリクトを解決するために変更された部分を比較し、両方の変更を組み合わせて新しいファイルを作成することができます。
※コンフリクトとは…
2人以上の作業者が同じファイルを同時に変更しようとするときに起こる問題のこと。
どちらかが自分の作業を破棄してもう一方の人の作業に従うか、両者の作業を組み合わせたものを作って解決する必要があります。
【操作方法】
コンフリクトを解決するにはSourcetreeの画面からコンフリクトしているファイルを右クリックし[競合の解決]を選択します。[自身の変更内容で解決]は自分の作業を優先して反映します。
また、該当のファイルを開くと、どの変更を残し、どの変更を破棄するか選択するプロンプトが表示されます。
選択後、ファイルを保存し変更をコミットします。
2. スタッシュ機能
例えばローカルで編集中のファイルをコミットせずに別のブランチに切り替える必要がある場合、Errorが表示されることがあります。その場合はスタッシュ機能を使うことで変更を一時的に隠しておくことができます。
【操作方法】
変更をスタッシュするには該当するファイルを選択し、Sourcetreeアプリ上部のメニューのスタッシュ、もしくはツールバー>リポジトリ>[変更をスタッシュに回避]をクリックし、スタッシュに適当な名前をつけて一時保存します。
この時点でローカルのファイルの変更がリセットされ、他のブランチに切り替えることができるようになります。
変更内容を取り出す準備ができたら、左メニューの[スタッシュ]タブから適用したいタイトルを選択し、[スタッシュを適用] をクリックします。
3. コミットメッセージのグループ化
コミットメッセージはコードの変更を追跡しプロジェクトの開発履歴を残すために必要ですが、変更を小刻みにコミットしていると後々Gitログが乱雑になることがあります。その時はコミットをグループ化し開発メンバーにも見やすくしましょう。
【操作方法】
溜まったコミットメッセージをグループ化するには、グループ化したいコミット数 + 1を選択し、右クリックして[〜の子を対話形式でリベース…]を選択します。
新しい画面で[過去を含めてSquash]を選択し、複数のコミットをまとめます。
次に、グループ化されたすべてのコミットに対して[メッセージを編集]を選択することで1つのコミットメッセージを書くことができます。
備考>グループ化を戻す場合
グループ化を間違えてしまった時、元に戻す場合にはコマンドを使います。
!操作履歴から戻すため、グループ化の後に多くの操作をしていない場合のみ有効。
【操作方法】
git reflog
# 操作履歴を参照
2be6f11 HEAD@{0}: xxxxxxxxxxxx
18389ad HEAD@{1}: xxxxxxxxxxxxx
0c485c8 HEAD@{2}: xxxxxxxxxxxxxx
b751438 HEAD@{3}: xxxxxxxxxxxxxxx # ここに戻したいので一つ前の数字を指定↓
hc8a0s8 HEAD@{4}: xxxxxx
#ログが出たら「q」キーを押す
git reset --hard 'HEAD@{4}'
# のように数字を指定するとその時点に戻る
参考:https://gist.github.com/naokazuterada/9e45a937f7574ebf91a7
このコマンド操作の後、Sourcetreeの[フェッチ]をクリックするとアプリの画面にも反映されます。
備考>プッシュ済のコミットをグループ化
基本的にチームで開発している時にプッシュ済のコミットの変更は参照していません。
それとは別に、個人で開発している人限定の操作となります。
【操作方法】
先程と同じ様に、まとめたいコミット数 + 1を右クリックでリベース、スカッシュして名前をつけます。
※ここで[プッシュ]に数字が出ていなかったら[フェッチ]してください。
数字がでたら「強制プッシュ」にチェックを入れてプッシュします。
※強制プッシュでErrorが出る時には前回の記事の最終項目を参照し設定してください。
参考:https://qiita.com/Esfahan/items/5e0eeafa6a01fa723435
4. ファイルの変更を追跡させないように設定する
リポジトリに含む必要の無い開発ツールなどは、.gitignoreファイルに記述することで変更を追跡させない様にすることができます。
【操作方法】
追跡を回避するファイルを新規に設定するには、Sourcetreeの右上[設定]>[高度な設定]>ポジトリ限定無視リストの[編集]をクリックします。
.gitignoreファイルがエディタで開かれるので、該当するフォルダ、もしくはファイル名(ここでは[tool]フォルダ)を追加してファイルを保存してください。
ファイル単位で無視する場合はローカルの変更から該当ファイルを右クリック、[無視]を選択します。
すると無視するパターンを選ぶことができる画面が開きます。
個別のファイルだけでなく、特定の拡張子を無視するリストにすることもできます。
こちらの操作の場合、エディタを開かなくてもパターンを選択することで自動的に.gitignoreに書き込みができます。
・フォルダ単位で無視、または指定方法が分かるので自分で書き込みたい→設定から
・特定のファイルのみ、または指定方法が分からないのでガイドが必要→該当ファイルを右クリック>[無視するファイルまたはパターン]の中の選択肢から設定。
最後に
これらの操作を覚える事でGitリポジトリを効率的に操作することができるとともに、よくあるエラーを解決するヒントになればと思います。
なお、当記事は以前の記事の基本的な操作方法に十分に慣れた上でSourcetreeの使い方をより深く理解していただくためのものですので、まだ使い始めて間もない方は初心者向け記事を是非ご覧ください。
【SourceTree初心者向け】 更新作業の操作まとめ
【SourceTree中級者向け】 コミット/プッシュ先の間違いを戻す操作まとめ