DUICUO

インタビュアー: Git Reset と Git Revert についてどのように理解していますか?違いは何でしょうか?

[[418395]]

この記事は、WeChat公式アカウント「JS日语問」(著者:慧慧)からの転載です。転載の許可については、「JS日语問」公式アカウントまでお問い合わせください。

I. それは何ですか?

git リセット

`reset` 関数は以前のバージョンに戻すために使用され、使用されなくなったコミットを破棄できます。

放棄を実行する際には、影響範囲に応じて異なるパラメータを指定する必要があります。インデックスを復元するか、作業ツリーのコンテンツを復元するかを指定できます。

git を元に戻す

現在のコミットの後に新しいコミットを追加すると、前のコミットによって行われたすべての変更が無効になります。過去の履歴は変更されず、主に以前に公開されたコミットを安全に元に戻すために使用されます。

II. 使い方

git リセット

IDが指定されていない場合は、デフォルトでHEADが使用されます。IDが指定されている場合は、指定されたIDに基づいてステージング領域または作業領域の内容が変更されます。

  1. // ID が指定されていない場合、ステージング領域の内容は現在の ID バージョン番号の内容で上書きされますが、作業領域は変更されません。
  2. git リセット
  3.  
  4. // ID を指定すると、ステージング領域の内容が指定された ID のバージョン番号で上書きされますが、作業領域は変更されません。
  5. git リセット <ID>

ログ ID は、次のように `git log` を使用して照会できます。

  1. コミットa7700083ace1204ccdff9f71631fb34c9913f7c5 (HEAD -> マスター)
  2. 著者: linguanghui <[email protected]>
  3. 日付: 2021年8月17日火曜日 22:34:40 +0800
  4.  
  5. 2番 専念 
  6.  
  7. コミットe31118663ce66717edd8a179688a7f3dde5a9393
  8. 著者: linguanghui <[email protected]>
  9. 日付: 2021年8月17日火曜日 22:20:01 +0800
  10.  
  11. 初め 専念 

一般的なコマンドは次のとおりです。

  • --mixed (デフォルト): デフォルトでは、一時保存領域のみが変更されます。
  • --hard パラメータ: --hard パラメータを使用すると、ワークスペースも変更されます。
  • --soft: --soft パラメータを使用すると、スクラッチ領域と作業領域は変更されません。

git を元に戻す

`git reset` と同様に、`git revert` は操作を元に戻します。この操作の前後のすべてのコミットと履歴は保持され、元に戻されたコミットは以下のように最新のコミットとして扱われます。

  1. git revert <コミットID>

以前のバージョンを元に戻すには、次のコマンドを使用します。

  1. git で HEAD を元に戻す

以前のものは次のように取り消されました:

  1. git で HEAD を元に戻す^

III. 相違点

`revert` はパブリックコミット (すでにプッシュされたものなど) を元に戻す安全な方法として設計されていますが、`git reset` はローカルの変更をリセットするように設計されています。

2 つのコマンドは目的が異なるため、実装も異なります。reset は変更セットを完全に削除しますが、undo は元の変更を保持し、新しいコミットを使用して元に戻します。

両者の主な違いは次のとおりです。

  • `git revert` は以前のコミットを新しいコミットでロールバックし、`git reset` は指定されたコミットを削除します。
  • `git reset` は HEAD をわずかに前進させますが、`git revert` は HEAD を前進させますが、新しいコミットの内容は、元に戻す内容とまったく逆であるため、元に戻した内容は取り消されます。
  • ロールバック操作自体の効果は似ていますが、後で古いバージョンをマージする際には違いがあります。

`git revert` は、リバースコミットによって以前のコミットを「無効化」します。そのため、後で古いブランチをマージする際に、以前のコミットのコードがまだ残っており、再マージが成功しません。

ただし、`git reset` は特定のブランチから特定のコミットを削除するだけです。そのため、古いブランチに再度マージする際には、これらのロールバックされたコミットも含める必要があります。

後で元に戻したブランチのコードが必要になった場合は `git revert` を使用します。ブランチが間違って作成され、他の人にエラーを発見されたくない場合は `git reset` を使用します。

参考文献

https://juejin.cn/post/6844903542931587086

https://marklodato.github.io/visual-git-guide/index-zh-cn.html#reset