# merge --abort | mergeを中止する (★)

## 難易度: :star:

## コマンドの概要

* merge中に問題が生じ、作業自体を取り消したい場合には --abort オプション付きで実行することでキャンセルが可能です。

## 例題 (リポジトリ: [git-drill/merge-abort](https://github.com/git-drill/merge-abort))

1. :mag: このリポジトリでは1つのテキストファイル(sample.md)が管理されています。
2. :mag: checkout直後はローカルではmasterブランチのみが参照可能です。
3. :octocat: リモートリポジトリにmasterとdevelopの2つのブランチが存在することを確認してください。
4. :octocat: masterブランチに以下のいずれかのブランチをmergeしてください。
   1. リモートのdevelopブランチ
   2. ローカルのdevelopブランチ (checkoutする必要があります)
5. :octocat: コンフリクトが発生しmergeが完了しないことを確認してからmerge自体を中止してください。

## 例題の模範回答

1. `git branch -a` で以下の表示を確認します。

   ```
   * master
    remotes/origin/develop
    remotes/origin/master
   ```
2. 現在のリポジトリの状態を確認します。
3. 以下のいずれかを実行してmergeします
   1. リモートのdevelopブランチをmergeする場合
   2. ローカルのdevelopブランチをmergeする場合
4. コンフリクトによりmerge作業が停止したことを確認します。
5. merge作業を中止するには以下を実行すれば完了です。
6. merge作業前の状態と同じであることを確認します。

## 例題の解説

1. `git branch` の `-a (--all)` オプションは、現在のブランチを含む全てのブランチを表示します。
2. 今回使用した `git log` の各オプションについて知りたい場合は、[こちらの課題](https://imaizume.gitbook.io/git-drill/-LMR6DYjovjrTX3cyT6K/merge-abort)を解いてみましょう。
3. checkout直後はmasterブランチのみが手元にある状態のため、developをマージするには以下のいずれかを実行する必要があります。
   * リモートのdevelopブランチをmasterへmergeするか、または
   * リモートのdevelopブランチをローカルにcheckoutしそれをmasterへmerge
4. mergeの途中で "CONFLICT (content): Merge conflict in ..." というメッセージは、2つの差分を自動的にmergeできなかったことを表します。今回はmergeを中止しますが、[コンフリクトを目視で確認し手動で統合することも可能](https://imaizume.gitbook.io/git-drill/-LMR6DYjovjrTX3cyT6K/merge-abort)です。中止する場合は `--abort` オプション付きでmergeコマンドを実行します。
5. merge前の状態に戻ります。なお複数ファイルがコンフリクトしていた場合や、手動でのマージ作業を途中まで行った場合でも、同様に中止可能です。

## 演習
