Browsed by
Category: Git

[Git] SourceTree でコンフリクトの解消

[Git] SourceTree でコンフリクトの解消

ブランチのマージ

Github でプルリクからマージする時に、コンフリクトしてマージが行えなかった。

その解決にはまず、main のデータを作業ブランチに取り込む。

main ブランチを取得した状態で「現在のブランチに main をマージ」を選択する。リモートを右クリックして、リモートの「現在のブランチに origin/main をプル」で可。

コンフリクトしているファイルを確認して右クリックから「競合を解決」から動作を選択。

  • 自分(mine)の変更内容で解決
    • 自分の変更を採用する場合はこちらを選択
  • 相手(theirs)の変更内容で解決
    • 自分の変更を破棄して相手の変更を採用する場合はこちらを選択
  • 解決とマーク
    • 手動でマージした場合はこちらを選択

コンフリクトが解消できたらコミットしてプッシュすれば良い。

リベースでコンフリクト

リベースしようとしてコンフリクトした場合は「操作」から「リベースを中止」を選択。

この場合はマージした方シンプルな気がするので、対象のブランチを右クリックして「現在のブランチに main をマージ」を選択する。コンフリクトを解消してからコミット&プッシュする。

[Git] SourceTree の基本操作

[Git] SourceTree の基本操作

新規ブランチ作成

ブランチを右クリックして「名前を変更」を選択して、出現したダイアログにブランチ名を入力して OK を押すとブランチが作られる。

main ブランチに戻る

リモートの origin/main を右クリックして「origin/main をチェックアウト」を選択。

「新規ブランチを作成してチェックアウト」を行えば、origin/main ブランチが取得できる。

現在のブランチに origin/main をマージ

リモートから「現在のブランチに origin/main をプル」を選択。

コンフリクトしなければ、origin/main の変更コミットが取り込まれる。コンフリクトした場合は、ダイアログが表示されるので、ファイルステータスからコンフリクトを解消して、変更をコミットする。

リベース

リベースする場合は Origin に Push したかどうかによって、挙動が異なる?ので注意。コミットは問題ないが、基本的に Push した後はリベースはしない方がよい。

タイムラインからリベース

フェッチしてタイムラインが更新された後に、origin/main を右クリックして、そこから「リベース」を選択してもリベース。

ブランチからリベース

new_feature5 ブランチをリベースしたい。origin/main を取得して、new_feature5 ブランチにいる状態で、main ブランチを右クリックして「現在の変更を main にリベース」を選択する。

リベースでコンフリクト

リベースでコンフリクトした場合は、コンフリクトを解消しつつ、メニューの「操作」からリベースを続けるのか中止するのか、選択していく。ちなみにコンフリクトした場合は、コミットごとに数回のコンフリクト解消が必要みたい。

「リベースを続ける」が選べない状態になるまで、メニューを選択してコンフリクトを解消していく。