💊

SourceTreeによるGit操作のよく使う機能とトラブルシューティング

2023/08/22に公開
  • Gitの概要や基本操作は対象外としています
  • Git初心者にも役立つよく使う機能や初歩的なトラブルシューティングを含めています。
  • Macと日本語環境のSourceTreeを使う前提ですので、Windowsや英語環境の場合は読み替えてください

コミット前の操作

変更内容をいくつかのコミットに分けたい

  1. ファイルを選択する
  2. コミットしたい行を選択、右クリックから「選択した行をステージへ移動」を選択する
  3. 分割したい単位で随時コミットする

作業中の変更内容を一時保存したい

  1. 「スタッシュ」ボタンを選択する
  2. メッセージを入力して「スタッシュ」ボタンで保存する(任意、On <ブランチ名>: <メッセージ>形式で記録される)

スタッシュの復元は以下の手順です。

  1. サイドバーの「スタッシュ」を選択してスタッシュ一覧を表示する
  2. 復元したいスタッシュをダブルクリック、または右クリックから「退避した変更を適用」を選択する

ファイルの変更をすべて元に戻したい

  1. ファイルを右クリックして「リセット…」を選択する

変更があるすべてのファイルを一度に元に戻したい

「リセット…」の方法だとファイル数が多い場合に動作が重くなることがあります。
次の方法を検討してください。

  1. サイドバーで別のブランチをダブルクリックする
  2. 「ローカルの変更を破棄」にチェックを入れて「OK」を選択する
  3. コミットしていない未追跡のファイルは残るので、「リセット…」の手順で削除する

変更内容の一部だけを元に戻したい

  1. ファイルを選択する
  2. Hunk単位で戻したい場合は「Hunkを破棄」、行単位で選択したい場合は戻したい行を選択して「選択した行を破棄」を選択する

コミット後の操作

最後に保存したコミットメッセージを変更したい

  1. 「コミット」ボタンを選択する
  2. 「コミットオプション…」から「直前のコミットを上書き」を選択する
  3. コミットメッセージが表示されるので、テキストを修正して「コミット」する

最後に保存したコミットにファイルを追加したい

  1. 「コミット」ボタンを選択する
  2. 「コミットオプション…」から「直前のコミットを上書き」を選択する
  3. ファイルあるいは反映したい行をステージングに登録、「コミット」する

コミットした内容の一部を元に戻したい

  1. コミットからファイルを選択する
  2. Hunk単位で戻したい場合は「Hunkを戻す」、行単位で選択したい場合は戻したい行を選択して「行を元に戻す」を選択する
  3. 差分ファイルができるのでコミットする

コミット単位で元に戻したい

  1. 元に戻したいコミットで右クリックをして「コミット適応前に戻す…」を選択する
  2. Revert “コミット名”形式でコミットが反映される

コンフリクトが起きたので、他の人の変更を優先して取り込みたい

  1. コンフリクトが発生しているファイルを選択する(複数可能)
  2. 「競合を解決」から「相手の変更を使って解決」を選択する
  3. 差分ファイルができるのでコミットする

別ブランチにあるコミットを自分のブランチに取り込みたい

  1. 取り込みたいコミットを選択して、右クリックから「チェリーピック」を選択する
  2. 差分ファイルができるのでコミットする(コンフリクトが起きた場合は解消する)

ファイルの変更履歴を見たい

  1. ファイルを右クリックして「選択したファイルのログ…」を選択する

⚠️任意の場所にあるコミットメッセージを変更したい

  1. 修正したいコミットの1つ前(過去)を選択、右クリックから「<コミットID>の子を対話形式でリベース…」を選択する
  2. コミットの行を選択して「メッセージを修正」を選択する
  3. メッセージを修正後「OK」を選択して保存する

⚠️最後に保存した内容を完全に消去したい

  1. コミットを右クリックして「ブランチ名 をこのコミットまで戻す」を選択する
  2. 「Hard - すべての作業コピーの変更内容を破棄」を選択して「OK」を選択する

よくあるトラブルシューティング

ローカルブランチでの変更内容を消去して、リモートブランチからやり直したい

  1. 別のブランチに移動する
  2. 削除したいブランチで右クリックして「ブランチ名 を削除」を選択する
  3. 「リモートブランチ[orgin/ブランチ名]を削除」にチェックを入れずに「OK」を選択する

コミット済みの場合は「強制的に削除」にチェックを入れて「OK」を選択してください。

⚠️誤ってmainブランチでコミットしていた内容を別のブランチに移したい

  1. mainブランチからブランチを作成、プッシュする
  2. mainブランチに戻り、「origin/main」のコミットで右クリック、「main をこのコミットまで戻す」を選択する
  3. 「Hard - すべての作業コピーの変更内容を破棄」を選択して「OK」を選択する
  4. 1.で作成したブランチで作業を続ける

⚠️消してしまったブランチを元に戻したい

  1. command + control + Wでコマンド履歴を表示する(または「表示」にある「コマンド履歴を表示」)
  2. 「ブランチを削除しています…」と書かれた項目のトグルを開く
  3. branch -d <ブランチ名> Deleted branch <ブランチ名> (was<コミットID>).のようになっている箇所(実際にはオプションが多数指定されています)を確認して、「ブランチ名」と「コミットID」を控える
  4. 「ブランチ」ボタンを選択する
  5. 「新規ブランチ」に「ブランチ名」を、「コミット:」を「指定したコミット:」にチェックを入れて「コミットID」をテキストフィールドにペースト、「ブランチを作成」を選択します

⚠️ローカルとリモートでファイル名の大文字小文字が違うのを直したい

Macではファイル名の大文字と小文字を区別していないため、プッシュ後にファイル名を変更しても差分が出てきません。
大文字と小文字を区別する設定をしただけでは、次のような意図しない挙動になります。

  1. A.txtをプッシュ
  2. ローカルでA.txtをa.txtに修正しても差分が検知されない
  3. リポジトリのルートでgit config core.ignorecase falseを実行して差分が検知されるように設定する
  4. 差分をプッシュする
  5. リモートにはA.txtとa.txtが存在している
  6. ローカルでa.txtを更新するとa.txtとA.txtの両方に差分が発生する
  7. 6.をプッシュすると、リモートでa.txtとA.txtの両方が更新される

次のように修正します。

  1. リポジトリのルートでgit config core.ignorecase falseを実行する(またはSourceTreeの「設定」「高度な設定」「Configファイルを編集…」にあるignorecaseを編集する)
  2. ローカルで該当のファイル名を一時的に別のファイル名に変更(例:A.txt→temporary.txt)してコミットする
  3. 一時的なファイル名(temporary.txt)を正しいファイル名に変更してコミットする
  4. 変更をプッシュする

Discussion