git のリセットとリバートの違いは何ですか
相違点: 1. リセットは指定されたコミット バージョンへの完全なロールバックであり、コミット後のすべてのコミットはクリアされますが、復帰は指定されたコミットの変更を元に戻すだけで、後続のコミットには影響しません。 2. リセット実行後はレコードが生成されませんが、リバート実行後はレコードが生成されます。
このチュートリアルの動作環境: Windows 7 システム、Git バージョン 2.30.0、Dell G3 コンピューター。
Git は、私たちがよく使用するバージョン管理ツールです。私たちのチームが開発プロジェクトで共同作業するとき、コードやファイルの変更や提出、製品要件の頻繁な変更により、さまざまな競合が頻繁に発生します。バージョンをロールバックして提出を取り下げるかどうかを決定する必要があるため、この時点では、reset コマンドと revert コマンドが役に立ちます。
reset と revert はどちらも元に戻す、ロールバックするという意味がありますが、それぞれにメリットがあり、その違いは依然として非常に大きいです ので、どのコマンドを使用するかは、この記事は、この 2 つの違いを理解して、正しいコマンドを正確かつ迅速に使用して実践的な問題を解決しましょう!
下面的例子中,我有3次提交: 初始状态,只有readme一个文件,内容为Creating a new branch is quick. t1提交后状态:只有readme一个文件,内容修改为Creating a new branch is quick 1. t2提交后状态:只有readme一个文件,内容修改为Creating a new branch is quick 1 2. t3提交后状态:新增了test文件.
この記事では、例として git bash を取り上げます:
まずはリセットについて話しましょう:
reset、使用法: git replace --hard commit
、コミットは送信後に生成された SHA1 です。このコマンドを実行すると、コードはこの送信の状態、作業ステージング領域、および作業ステージング領域に完全にロールバックされます。以降の提出は、提出記録も含めて完全に消去されます。
例:
元のプロジェクトには Readme.txt ファイルが含まれています:
ファイルの内容:
この時点で、ファイルの内容を次のように変更します。
新しいブランチの作成は簡単です 1.
を最初にします提出 :
提出レコード:
提出されたリモート ウェアハウス ディレクトリとファイルの内容:
いいえ問題がある場合は、ファイルの内容の変更を続けます: 新しいブランチの作成は簡単です 1 2.、 2 番目の送信:
ここで、新しいテスト ファイルを追加し、 3 番目の送信を行います :
さて、製品要件は次のようになります。変更されました 新しい機能 (Readme の 2 回目の修正と新しいテスト ファイル) はもう必要ありません。最初の送信 "t1" に戻る必要があります。リセットを使用することを選択した場合:
位置最初に t1 へのコミットをリモート ウェアハウスのコミット履歴からコピーするか、コマンド git log
を使用して表示できます:
(ヒント、最後の ":" が 1 行にある場合は、wq と入力して終了し、コマンド ラインに戻ります!)
コミットをコピーして、コマンド
git reset --hard 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2
を実行します。
プロンプト、HEAD は t1 を指していますが、背景を更新すると変化がないことがわかります。これはまだプッシュを実行する必要があるためですが、ここで注意する必要があるのは、ローカル コードは古いバージョンに戻りましたが、リモート ウェアハウスは新しいバージョンです。ローカル コードと矛盾しているため、git Push を使用するとエラーが発生します。ここでは、強制コミット、git Push を使用する必要があります。 -f
、git status
を使用して現在のステータスを確認することもできます:
意思是告诉你,远程仓库代码较新,需要你执行 git pull
操作以同步代码,但这并不是我们的需求,所以我们不用理会,执行,git push -f
:
再看仓库:
历史记录只剩下了t1:
readme内容也得到了恢复:
可见,reset是彻彻底底的回退,该commit之后的所有修改将完全消失,包括提交记录。
优点:
- 彻底回退到指定版本,干净清爽;
- 提交时间线清晰,没有冗杂;
缺点:
- 记录彻底清除,无法再次恢复;
再说revert:
revert执行后会产生新的commit记录,是通过一次新的commit来恢复到之前旧的commit,但revert会保留恢复的该次提交后面的其它提交内容,假如后面的提交与要恢复的提交更改了同一地方,此时用revert就会产生冲突!
我们继续以上面的例子为例,我重新执行了t2和t3提交,恢复到reset之前的状态:
此时,我们按reset的思路,使用revert恢复到t1,执行命令:
git revert 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2
报错:
提示冲突了?让我们解决掉冲突后提交…
<<<<<<< HEAD Creating a new branch is quick 1 2. ======= Creating a new branch is quick. >>>>>>> parent of 8cbf16c (t1)
上面的冲突表示,当前的内容是:
Creating a new branch is quick 1 2.
而我们要恢复的内容是:
Creating a new branch is quick.
如果对revert命令没有深入了解的话,就可能会产生疑惑,为什么会冲突?而且我实际上是想像reset一样恢复或者说是回退到t1(这里要再次说明一下t1的状态:只有一个readme文件,且内容是Creating a new branch is quick 1),但为什么冲突提示要恢复到Creating a new branch is quick.???这不是初始状态吗?
其实,准确来说,revert是撤销/撤回/反提交的意思,我们不能按reset的思路理解,我们执行git revert t1
,这么做其实结果是要撤销t1的提交,注意,仅仅是撤销t1的提交,把t1的修改恢复到t1之前也就是初始的状态,而不会影响t2,t3的提交。但如果t2,t3中修改了t1修改的同一地方,那么就会产生冲突,因为revert意图撤销t1的修改,但发现t2和t3把t1的修改再次修改了,此时,revert意图变得不清晰,因为它无法确定到底是应用你最新的修改,还是恢复到初始状态,这将由你来决定!
所以我们想要恢复t1的状态,那我们就应该撤销t2对t1的修改git revert t2
:
git revert fc4889dcb327cff9f8078db6a0d5c601b8e91ae9
执行后会自动进入编辑界面:
这里需要我们修改或输入提交日志,按 “i”,进入输入状态,写完后按ESC退出输入状态,再按“:wq”退出!
成功后,执行 git push:
查看仓库后台:
项目目录:
readme内容:
可见,revert操作成功后,产生了新的commit记录,t2对t1的修改已经恢复,现在的readme就是t1提交后的状态,但同时test文件仍然存在,即t3的提交不受影响!
但如果你說,想要和reset一樣,把t2t3的提交也要刪除掉,那你就先revert t3,再revert t2,可以達到同樣的效果,但這樣一來,為何不直接用reset ?如果你說既想達到reset的效果,又想有紀錄防止反悔,那這。 。 。是一個值得思考的問題!
git reset和revert區別的總結:
- #reset是徹底回退到指定的commit版本,該commit後的所有commit都將被清除,包括提交歷史記錄;
- revert僅僅是撤銷指定commit的修改,並不影響後續的commit,但所撤銷的commit被後續的commit修改了同一地方則會產生衝突;
- reset執行後不會產生記錄,revert執行後會產生記錄;
- reset執行後無法再次恢復,revert執行後因為不會清除記錄,並且會產生新紀錄,所以檔案不會遺失,你可以多次執行revert恢復到某次改變之前的狀態;
- reset執行後HEAD會後移,而revert的HEAD則一直是向前的;
理清了reset和revert的基本原理,你就明白了在什麼時間該使用哪個指令更為合適了!
小提示:在IDEA開發工具中,選取一個文件,在右鍵git選項中會發現有一個Rollback:
這裡要跟reset和revert區分一下,rollback並不屬於git指令,它的作用是,在檔案或程式碼修改後,但還未commit,想恢復到與遠端倉庫程式碼一致的狀態,便可以執行rollback操作!
推薦學習:《Git教學》
以上がgit のリセットとリバートの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

グレイスケール投資:機関投資家が機関や投資家にデジタル通貨投資サービスを提供するための機関投資家が入国します。同社はいくつかの暗号信託を立ち上げました。これは広範な市場の注目を集めていますが、これらの資金のトークン価格に対する影響は大きく異なります。この記事では、Grayscaleの主要なCrypto Trust Fundsの一部を詳細に紹介します。 Grayscale Major Crypto Trust Fundsは、Grayscale Investment(2013年にDigitalCurrencyGroupによって設立された)で利用可能なさまざまなCrypto Asset Trust Fundsを管理し、機関投資家と順応の高い個人を提供する投資チャネルを提供します。その主な資金には、ZCASH(ZEC)、SOL、

毎週の観察:ビットコインを蓄えている企業 - 醸造の変化毎週のメモの見落とされがちな市場動向をよく指摘します。 MicroStrategyの動きは厳しい例です。多くの人は、「マイクロストラテジーとマイケルセイリャーはすでによく知られていますが、これは真実ですが、多くの投資家はそれを特別なケースと見なし、その背後にあるより深い市場の力を無視しています。このビューは片側です。ここ数ヶ月の予備資産としてのビットコインの採用に関する詳細な研究は、これが孤立したケースではなく、出現している主要な傾向であることを示しています。今後12〜18か月で、何百もの企業が訴訟を起こし、大量のビットコインを購入すると予測しています

上海ジョトン大学、上海アイラブ、および香港中国大学の研究者は、Visual Language Big Model(LVLM)のパフォーマンスを大幅に改善するために少量のデータのみを必要とする視覚RFT(視覚エンハンスメントファインチューニング)オープンソースプロジェクトを開始しました。 Visual-RFTは、DeepSeek-R1のルールベースの強化学習アプローチとOpenAIの強化微調整(RFT)パラダイムを巧みに組み合わせて、このアプローチをテキストフィールドから視野に拡張しました。視覚的サブカテゴリ化やオブジェクト検出などのタスクの対応するルール報酬を設計することにより、Visual-RFTは、テキスト、数学的推論、その他のフィールドに限定されているDeepSeek-R1メソッドの制限を克服し、LVLMトレーニングの新しい方法を提供します。 Vis

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Binance LaunchPool詳細分析:高利回りの採掘ガイドとバイオプロジェクトの詳細な説明は、Binance LaunchPoolの詳細な議論を行い、その利回りを分析し、参加方法を詳細に説明し、最新のプロジェクトBio Coin(BIOL)の導入に焦点を当てます。世界最大の暗号通貨交換として、BinanceはLaunchPoolで高品質のプロジェクトを選択し、投資家に新しい鉱業と新しいトークンを取得する機会を提供しました。 Binance LaunchPoolとは何ですか? Binance LaunchPoolは、指定された通貨を誓約することで、新しいトークンを無料で獲得するプラットフォームです。これは、株式市場の新しい株式サブスクリプションに似ていますが、参加者は少なくなり、競争が少なくなり、少額の投資も高い収益を得ることができます。

質問の説明:海外バージョンの配送地域データを取得する方法は?既製のリソースはありますか?国境を越えた電子商取引またはグローバル化ビジネスで正確に入手してください...

GiteEpages静的Webサイトの展開が失敗しました:404エラーのトラブルシューティングと解像度Giteeを使用する
