相違点: 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 サイトの他の関連記事を参照してください。

GITの競合を解決するには、次の手順を実行します。紛争の原因を特定し、手動で解決します。 1つのバージョンを保持するか、2つのバージョンをマージするか、1つのバージョンに戻ります。マージされた変更をコミットします。変更をプッシュします。

gitを使用してコードを取得する方法:gitをインストールします。 git clone&lt;リモートリポジトリURL&gt;を使用して、リモートリポジトリをクローニングします。新しいディレクトリに切り替えます。最新の変更を引いて、Git Pullを使用します。変更を確認し、Gitステータスを使用してください。変更をコミットするには、git commit -m&quot;&lt;メッセージを送信します&gt;&quot;を使用します。変更をプッシュし、gitプッシュを使用します。

SSHを介してGITにログインすると、パスワード検証を排除し、異なる環境間の切り替えを簡素化し、SSHの主要な承認を通じてセキュリティを改善できます。特定の手順には以下が含まれます。1。SSHキーペアを生成します。 2. SSHプロキシにSSHキーを追加します。 3. gitサーバーにSSH公開キーを追加します。 4。SSHアクセスをテストします。セキュリティのヒント:SSHプライベートキーのセキュリティを保護することが非常に重要です。

gitを使用して秘密キーを生成する手順:秘密キーを生成:SSH-Keygenコマンドを実行します。 SSHプロキシに公開キーを追加します。SSH-ADDコマンドを使用します。公開キーをリモートリポジトリに追加します。公開キーをリポジトリ設定ページのSSHキーセクションに貼り付けます。秘密鍵を使用して、リモートリポジトリをクローンまたはプルします。GitクローンまたはGit Pullコマンドを使用して、リモートリポジトリのURLとユーザー名を指定します。

特定のコミットIDをマージするには、コマンドを使用します:git merge&lt; commit-id&gt;。まず、マージされたコミットIDを見つけ、ターゲットブランチに切り替えて、マージコマンドを実行します。マージの競合がある場合は、紛争を手動で解決し、マージを送信します。例:コミットIDを「ABC123」にマージし、コマンドを使用します:Git Merge ABC123。

Git Pushを元に戻すには2つの方法があります。新しいコミットとフォースプッシュを作成します。Gitプッシュを作成します。 Git Push - フォースオリジンメイン

GITを使用して最新のコードに更新するには、次の手順を実行する必要があります。リモートアップデートを取得する必要があります。GITフェッチマージリモートアップデートの現在のブランチ:Git Merge Origin/Main Merge競合(存在する場合)を解決し、リモートリポジトリ(オプション)にプッシュします:Git Push Origin Main

gitリポジトリアドレスを表示するには、次の手順を実行します。1。コマンドラインを開き、リポジトリディレクトリに移動します。 2。「git remote -v」コマンドを実行します。 3.出力と対応するアドレスでリポジトリ名を表示します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
