Web Analytics

こつこつエンジニア

現役アプリ開発者によるIT系特化ブログ

【Sourcetree】ブランチ切替で怒られた時の対処法3パターン

f:id:madai21:20211014133516j:plain

はじめに

Sourcetreeでブランチの切り替えを行うと、以下のように「Your local changes to the following files would be overwritten by checkout」という内容のエラーが出て、ブランチの切り替えができない場合があると思います。
f:id:madai21:20210917125203p:plain
今回はその対処内容について書きたいと思います。

環境

この記事はSourcetree3.4.4での確認内容となります。
Sourcetree3.4.4は以下の場所から取得できます。
www.sourcetreeapp.com

なぜこのようなエラーがでるのか?

「Your local changes to the following files would be overwritten by checkout」は日本語訳すると
「次のファイルへのローカルの変更は、チェックアウトによって上書きされます」
なので、変更しているのにブランチの切り替えで変更がなかったことになるよ?ダメだよね?って怒られています。
ですので、このようなエラー出ていたらまずは変更しているファイルをなんとかしましょう。

対処法3パターン

対処には以下の3パターンが考えられます。


  • 変更ファイルをどこかローカルで退避しておいて、変更分をSourcetreeで破棄する

  • 変更分をコミットしておく

  • 変更分をスタッシュ(退避)しておく

  • それぞれのパターンを確認してみましょう。

    [パターン1]変更ファイルをどこかローカルで退避しておいて、変更分をSourcetreeで破棄する

    はい、力技ですw
    ですが、一番安全なやり方(Sourcetreeに不具合あっても修正内容が消えない)かもしれません。

    変更ファイルをSourcetreeで確認後、それらのファイルをローカルのどこかにコピーします。
    その後、Sourcetree上から変更ファイルを選択してから右クリックで破棄を選びます。
    すると変更がなかったことになり、Gitで最新のファイルに戻ります。
    f:id:madai21:20210917131234p:plain


    変更分を戻したい場合はコピーしておいたローカルのファイルに差し替えます(あるいはマージします)

    [パターン2]変更分をコミットしておく

    問題なければ変更分をコミットしておきましょう。

    プッシュしなければ一時的にコミットしておくのもありかと思います。
    もし一時的にコミットした内容を取り消したい場合は戻りたいコミットを樹形図から選択しておいて右クリックします。
    ポップアップ画面で現在のブランチをこのコミットまでリセットを選ぶと、そのコミットまで戻すことができます。
    使うモードでMixedを選ぶと修正分はそのまま残ります。
    f:id:madai21:20210917183309p:plain

    [パターン3]変更分をスタッシュ(退避)しておく

    これが一番スマートなやり方だと思います。
    ですが、スタッシュしたものをうまく戻せなかったりする可能性もありますのでSourcetree上級者向けです。
    私は低級者なのでパターン2をよく使います(´;ω;`)w

    スタッシュは以下の赤枠から実行できます。
    f:id:madai21:20210917133140p:plain

    スタッシュ名を適当に入力(今回はtaihiとします)し、OKボタンを押します。
    f:id:madai21:20210917133210p:plain

    すると変更分がなくなり、スタッシュにtaihiという名前のものが表示されていると思います。
    これで変更分を退避することができます。
    f:id:madai21:20210917133315p:plain

    退避していた変更分を戻すには戻したいスタッシュを選択して右クリックします。
    スタッシュを適用を押しましょう。
    f:id:madai21:20210917133418p:plain

    OKボタンを押すと変更分が戻ります。
    f:id:madai21:20210917133533p:plain


    上記3パターンのいづれかで対処した後にブランチを切り替えると今度はエラーなく切り替えられていると思います。

    おわりに

    個人的にはスタッシュはあまり使わずにとりあえずコミットしておいて、もしくはコミット不要な修正は破棄してからブランチ切り替えることが多い気がします。
    なんでかなと振り返りましたが使い始めの頃に、スタッシュしたけどなんか戻らないってことが結構あったからだと思います^^;
    後はコミットしてもプッシュさえしなければ気軽に戻せることも要因としてあるかもしれません。

    ですが決してスタッシュを使うなということではなくて、一番自分のやりやすい、信じられる方法でするのがベストだと思います(`・ω・´)b