huazi

huazi

Git-ブランチのマージ後のロールバックのいくつかのシナリオの分析

今日、ブランチのマージ中に問題が発生しました。状況は次のようなものです。現在の開発ブランチ A に、ブランチ B をマージしようとしたところ、競合が発生しました。そのため、競合を解消し、解決後にコミットしました。しかし、その時に上司から別の方法がより良いかもしれないというアドバイスを受けました。そのため、元に戻して再度試してみることにしました。実際には、単純にリセットすればよかったのですが、公式ウェブサイトでこのようなケースについて説明されている記事を見つけたので、その通りに書いてみました。
記事のリンク:https://git-scm.com/blog/2010/03/02/undoing-merges.html
まず、いくつかの基本的な Git の知識について説明します:

  • Git リポジトリには、ワーキングディレクトリ、ステージングエリア、コミット履歴の 3 つの主要な要素があります。
  • reset は、ブランチの末尾を別のコミットに向けるものです。
  • checkout は、ブランチの切り替えです。
  • revert は、コミットを取り消すと同時に新しいコミットを作成します。

git revertは安全な方法です。git resetと比べて、現在のコミット履歴を変更しないため、git revertは公共のブランチで使用することができますが、git resetはプライベートブランチで使用するのが最適です。

次に、記事で紹介されているマージの取り消し方法について説明します:

マージのリセット:#

マージの前のコミットにリセットし、その後の操作をやり直すことです。ただし、これにはすべての共同作業者がヘッドのロールバック方法を知っている必要があります。これが問題ではない場合、またはローカルブランチの場合、これは非常に良い解決策です。手順は以下の通りです:

$  git checkout master
git reset --hard [ロールバックするコミットのSHA値] 

シンプルで効果的です。

マージの取り消し:#

マージ後に他の操作や変更がある場合、または共同作業者がマージ後にコミットを行った場合、Git にはマージを取り消す方法があります。revert コマンドを使用することができます。手順は以下の通りです:

$  git resert -m [取り消すマージの番号] [マージ前のバージョン、つまりSHA値]
Finished one revert.
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'"
 1 files changed, 0 insertions(+), 2 deletions(-)

これにより、対応するマージ操作を取り消す新しいコミットが作成されます。もし再度マージを試みると、Git はそのブランチ上のコミットが履歴にあることを認識し、既に持っているものを誤ってマージしようとすると想定します。

$ git merge jk/post-checkout
Already up-to-date.

リバートのリバート#

$ git revert [方法2でマージを取り消すときに作成されたコミットのバージョン、ここでは88edd6d]
Finished one revert.
[master 268e243] Revert "Revert "Merge branch 'jk/post-checkout'"" 1 files changed, 2 insertions(+), 0 deletions(-)

これで正常にマージできるようになりますが、これによりさらに競合が発生する可能性があります。
これで、以前のブランチのロールバックについてのすべてを再紹介しました。これで、このブランチでさらに作業がある場合は、再度マージすることができます。

$ git merge jk/post-checkout
Auto-merging test.txt
Merge made by recursive. test.txt | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)

最後に#

大まかに読んだ後、後半の方法はあまりにも手間がかかるように感じました。ただし、著者はおそらく公共のブランチでの複雑な変更に基づいている可能性があります。とにかく、ローカルブランチではリセットが最も便利だと感じますし、revert も可能ですが、あまり手間をかけないようにしましょう。
最後に、Git Community Bookの git rebase に関する記事を共有します。以前はよく理解していませんでしたが、とても良く書かれていると感じました:http://gitbook.liuhui998.com/4_2.html

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。