0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gitでローカルのdevelopを書き換えてしまった対応例

Posted at

はじめに

gitフローに則って共同作業の時、間違ってローカルのdevelopにマージしてしまった時の対応方法をメモります。

状況

gitフローに則る場合、1から3の繰り返しです。
1.リモートブランチ(ex:develop)をプル
2.ローカルのdevelopより、作業ブランチを作成(feature/xxx)
3.マージリクエストを出し、OKならリモートブランチ(ex:develop)にマージ

今回はローカルのdevelopに何らかの変更を加えてしまった場合の対応例を記載します(本来ありえないですが、私は遭遇してしまったので)。

現場では何らかのツール(例えばソースツリー)を使用しているかと思いますが、以下ではコマンドでの対応例を記載しています。

developブランチを書き換えてしまった対応

リモートブランチと同じ状態にローカルブランチをリセットすることは可能です。
ローカルの develop ブランチをリモートの develop ブランチと同じ状態に戻すには、以下のGitコマンドを使用します。
まず、最新の変更を取得し、その後でローカルの develop ブランチをリモートの状態にリセットします。

  1. リモートから最新の情報を取得します:

    git fetch origin
    
  2. ローカルの develop ブランチをリモートの develop ブランチにリセットします:

    git checkout develop
    git reset --hard origin/develop
    

これで、ローカルの develop ブランチはリモートの develop ブランチと全く同じ状態になります。
ただし、この操作はローカルで行った変更(まだリモートにプッシュしていないコミットなど)を完全に消去するので、実行する前に必要な変更がないか確認してください。

また、間違ってローカルで変更した内容がある場合は、それを新しいブランチに退避させてからリセットを行うことも考えられます。その場合、以下のように新しいブランチを作成してからリセットを行います:

git checkout -b new-branch-for-changes
git checkout develop
git reset --hard origin/develop

この方法で、変更を失うことなく安全に develop ブランチをリセットできます。

間違った内容(古いブランチ)から必要箇所を戻して進める方法

develop ブランチをリモートの最新状態に戻した後、以下の手順で新規ブランチを作成し、そこに必要な修正を反映してからマージリクエストを出すことが適切な流れになります。

  1. 新規ブランチの作成:

    • まず、リセットした develop ブランチから新しい作業用のブランチを作成します。
      git checkout develop
      git checkout -b new-feature-branch
      
  2. 修正の反映:

    • もし間違ったブランチで作業していたものや、古い develop から分岐したブランチにある修正を新しいブランチに取り入れたい場合は、cherry-pickrebase を使うことができます。
    • 例えば、特定のコミットだけを新しいブランチに取り込みたい場合、cherry-pick を使用します:
      git cherry-pick <commit-id>
      
    • 複数のコミットを順序良く反映させたい場合は、rebase の使用を検討します。ただし、rebase はコミット履歴を書き換える操作なので、他のユーザーと共有しているブランチには適用しないよう注意が必要です。
  3. 変更のプッシュとマージリクエストの作成:

    • 修正を加えた後、新しいブランチをリモートにプッシュします。
      git push origin new-feature-branch
      
    • プッシュしたブランチに基づいて、リモートのリポジトリでマージリクエスト(プルリクエスト)を作成します。このリクエストを通じて、develop ブランチへのマージを提案し、レビューを依頼します。

これにより、古い状態や誤って作業した内容が正しく取り扱われ、develop ブランチに安全に統合することができます。

cherry-pickの使い方

git cherry-pick コマンドを使用することで、他のブランチにある特定のコミットを現在のブランチに適用することができます。
これは、古い develop ブランチから分岐したブランチにある特定の修正を新しく作成したブランチに取り込む場合に便利です。

git cherry-pick の使い方

  1. 新しいブランチにチェックアウト:

    • 最初に、作業を行う新しいブランチにチェックアウトします。
      git checkout new-feature-branch
      
  2. cherry-pick の実行:

    • 次に、取り込みたいコミットのコミットIDを使って cherry-pick を実行します。
      git cherry-pick <commit-id>
      
    • <commit-id> は取り込みたいコミットのIDです。このIDは git log で見ることができます。

注意点

  • コンフリクトの可能性: cherry-pick 中にコンフリクトが発生することがあります。この場合は、手動でコンフリクトを解決し、git cherry-pick --continue を実行して操作を完了させる必要があります。
  • 選択的な取り込み: 複数のコミットを取り込む場合は、それぞれのコミットIDに対して cherry-pick を複数回実行するか、範囲を指定して実行します(例: git cherry-pick commit-id^..commit-id)。

この手順により、古いブランチの重要な修正を新しいブランチに確実に適用することができます。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?