## 目的
`git branch` と `git revert` の組み合わせは、以下の目的で使用します:
1. **履歴を壊さずに安全に変更を取り消す**
- `git revert` は指定したコミットの変更を打ち消す新しいコミットを作成します。
- チーム開発や共有リポジトリで履歴を変更したくない場合に適しています。
2. **現在の状態をバックアップしつつ変更を取り消す**
- `git branch` を使用してバックアップを作成することで、万が一のために現在の状態を保存しておけます。
## どんなときに役立つか
- **チーム開発時に特定の変更を元に戻したい場合**
- 例: 最新のコミットにバグがあり、その内容を取り消したい。
- **履歴を壊さずに変更を取り消したい場合**
- 例: リモートリポジトリに既にプッシュしたコミットを取り消す必要がある。
- **現在の作業内容を安全に保存しておきたい場合**
- 例: 取り消した変更が後で必要になる可能性がある。
## 手順
### 1. 現在の状態をバックアップする
まず、現在の状態を保存するために新しいブランチを作成します。
```bash
git branch backup_branch
```
- `backup_branch` は任意の名前に変更可能です。
- これにより、現在の状態が「`backup_branch`」という名前のブランチに保存されます。
### 2. 変更を取り消す
最新のコミットを取り消すには、以下のコマンドを実行します。
```bash
git revert HEAD
```
- `HEAD` は最新のコミットを指します。
- コマンド実行後、エディタが開いてコミットメッセージを編集できます。
- デフォルトのメッセージをそのまま使用しても問題ありません。
**特定のコミットを取り消す場合**:
```bash
git revert <commit_hash>
```
- `<commit_hash>` は取り消したいコミットのハッシュ値です。
### 3. コミットを確認する
`git revert` を実行すると、指定した変更を打ち消す新しいコミットが作成されます。
以下のコマンドで履歴を確認できます:
```bash
git log --oneline
```
例:
```
a1b2c3d Revert "Added new feature"
d4e5f6g Added new feature
```
### 4. 変更をプッシュする
リモートリポジトリに変更を反映させるには、以下のコマンドを実行します:
```bash
git push
```
## 注意事項
- `git revert` は履歴を壊さないため、安全に使用できますが、新しい「打ち消しコミット」が作成されることを理解しておきましょう。
- もし取り消したい変更が複数のコミットにまたがる場合は、`git revert` を複数回実行する必要があります。
- コンフリクトが発生する場合もあるため、その際は適切に解消してください。
## 実践例
### 状況
- 最新のコミットにバグが含まれている。
- 履歴を壊さずにその変更を取り消したい。
### 実行手順
1. 現在の状態をバックアップ:
```bash
git branch bugfix_backup
```
1. 変更を取り消す:
```bash
git revert HEAD
```
1. プッシュする:
```bash
git push
```
1. 必要に応じて、バックアップブランチを削除:
```bash
git branch -d bugfix_backup
```
以上で、安全に変更を取り消すことができます!