Heim > Entwicklungswerkzeuge > Idiot > Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

青灯夜游
Freigeben: 2021-11-30 14:58:15
Original
25840 Leute haben es durchsucht

Unterschiede: 1. Beim Zurücksetzen handelt es sich um ein vollständiges Rollback auf die angegebene Commit-Version, und alle Commits nach dem Commit werden gelöscht, während beim Zurücksetzen nur die Änderung des angegebenen Commits rückgängig gemacht wird und sich nicht auf nachfolgende Commits auswirkt. 2. Nach dem Zurücksetzen werden keine Datensätze generiert, nach dem Zurücksetzen werden jedoch Datensätze generiert.

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Git-Version 2.30.0, Dell G3-Computer.

Git ist unser häufig verwendetes Versionsverwaltungstool. Wenn unser Team an Entwicklungsprojekten zusammenarbeitet, kommt es aufgrund von Änderungen und Übermittlungen von Code und Dateien häufig zu Änderungen, die uns dazu zwingen Um die Version zurückzusetzen und die Entscheidung zum Commit zurückzuziehen, sind die Befehle „Reset“ und „Revert“ praktisch!

Zurücksetzen und Zurücksetzen haben beide die Bedeutung von „Rückgängig machen“ und „Zurücksetzen“, aber jeder hat seine eigenen Vorzüge und der Unterschied ist immer noch sehr groß. Daher muss anhand der tatsächlichen Situation entschieden werden, welcher Befehl verwendet werden soll Sie verstehen den Unterschied zwischen den beiden und können dann die richtigen Befehle präzise und schnell verwenden, um tatsächliche Probleme zu lösen!

下面的例子中,我有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文件.
Nach dem Login kopieren

Dieser Artikel nimmt Git Bash als Beispiel:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
Lassen Sie uns zuerst über Reset sprechen:

Reset, Verwendungsmethode: git reset --hard commit, Commit ist das SHA1 wird nach der Übermittlung generiert. Nach der Ausführung dieses Befehls wird der Code vollständig auf den Status zum Zeitpunkt dieser Übermittlung zurückgesetzt, und der Arbeitsbereitstellungsbereich und der Übermittlungsinhalt nach dieser Übermittlung werden vollständig gelöscht, einschließlich des Übermittlungsdatensatzes!

git reset --hard commit ,commit是提交后产生的SHA1,执行该命令后,代码会完全回退到本次提交时的状态,工作暂存区以及本次提交后面的提交内容将会被完全清除,包括提交记录!

举例:

原项目,包含一个Readme.txt文件:
Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
文件内容:
Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
此时我将修改文件内容为:

Creating a new branch is quick 1.

进行第一次提交
Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
提交记录:
Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
提交后的远程仓库目录及文件内容:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
没有问题,继续修改文件内容:Creating a new branch is quick 1 2. ,进行第二次提交
Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
现在我将新增一个test文件,进行第三次提交
Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

好了,现在产品需求变更了,新增的功能(readme的第二次修改和新增的test文件)不需要了,要求回退到第一次提交“t1”,如果我们选择使用reset:

首先定位到t1的commit,可以从远程仓库提交历史记录中复制,也可以用命令git log查看:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
(小提示,如果最后一行出现“:”,则输入wq退出回到命令行即可!)

复制commit,执行命令:

git reset --hard 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2
Nach dem Login kopieren

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

提示,HEAD已经指向了t1,但你刷新后台时,发现并没有什么变化,这是因为我们还需要执行一下push,但这里需要注意的是,因为本地代码回到了旧版本,但远程仓库是新版本和本地不一致,所以你在用git push时会报错,这里我们需要使用强制提交,git push -f,我们也可以使用git status

Beispiel:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

Originalprojekt, einschließlich einer Readme.txt-Datei: 🎜Bildbeschreibung hier einfügen🎜 Dateiinhalt: 🎜 Einfügen Bildbeschreibung hier🎜 An dieser Stelle werde ich den Dateiinhalt wie folgt ändern: 🎜🎜🎜Das Erstellen eines neuen Zweigs geht schnell 1.🎜🎜🎜 Machen Sie die 🎜 erste Einreichung🎜: 🎜Bildbeschreibung hier einfügen🎜 Einreichungsdatensatz: 🎜Bildbeschreibung hier einfügen🎜 Remote-Warehouse-Verzeichnis und Dateiinhalt nach der Übermittlung: 🎜🎜 Bildbeschreibung hier einfügenBildbeschreibung hier einfügen🎜 Kein Problem, ändern Sie den Dateiinhalt weiter:🎜Das Erstellen eines neuen Zweigs geht schnell 1 2.🎜, machen Sie 🎜zweites Commit🎜: 🎜Insert Bildbeschreibung hier🎜 Jetzt werde ich eine Testdatei hinzufügen und die 🎜dritte Einreichung🎜 erstellen: 🎜Bildbeschreibung hier einfügen🎜Einfügen Bildbeschreibung hierWas ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?🎜🎜 Okay, jetzt haben sich die Produktanforderungen geändert, die neuen Funktionen (die zweite Änderung der Readme-Datei und die neue Testdatei) werden nicht mehr benötigt und es ist erforderlich, zur ersten Einreichung „t1“ zurückzukehren, wenn wir dies wünschen Verwenden Sie Reset: 🎜🎜Suchen Sie zuerst den Commit von t1, der aus dem Commit-Verlauf des Remote-Warehouse kopiert oder mit dem Befehl git log angezeigt werden kann: 🎜🎜Bildbeschreibung hier einfügen🎜(Tipps: Wenn in der letzten Zeile „:“ erscheint, geben Sie wq ein zum Beenden und Zurückkehren zur Befehlszeile! )🎜🎜Kopieren Sie das Commit und führen Sie den Befehl aus: 🎜
git revert 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2
Nach dem Login kopieren
Nach dem Login kopieren
🎜„Bildbeschreibung🎜🎜 Tipp: HEAD hat auf t1 gezeigt, aber wenn Sie den Hintergrund aktualisieren, stellen Sie fest, dass es keine Änderung gibt. Dies liegt daran, dass wir noch einen Push durchführen müssen, aber was muss beachtet werden Aufgrund des lokalen Codes sind wir zur alten Version zurückgekehrt, aber die neue Version des Remote-Warehouse stimmt nicht mit der lokalen überein, sodass bei Verwendung von Git Push eine Fehlermeldung angezeigt wird. Hier müssen wir die erzwungene Übermittlung verwenden. git push -f, wir können auch git statusAktuellen Status anzeigen: 🎜🎜🎜🎜 verwenden

意思是告诉你,远程仓库代码较新,需要你执行 git pull操作以同步代码,但这并不是我们的需求,所以我们不用理会,执行,git push -f

![Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?](https://img-blog.csdnimg.cn/94c3e93f6efe40b6a4d12d02eb05cd4d.png

再看仓库:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

历史记录只剩下了t1:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

readme内容也得到了恢复:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

可见,reset是彻彻底底的回退,该commit之后的所有修改将完全消失,包括提交记录。

优点

  • 彻底回退到指定版本,干净清爽;
  • 提交时间线清晰,没有冗杂;

缺点

  • 记录彻底清除,无法再次恢复;

再说revert

revert执行后会产生新的commit记录,是通过一次新的commit来恢复到之前旧的commit,但revert会保留恢复的该次提交后面的其它提交内容,假如后面的提交与要恢复的提交更改了同一地方,此时用revert就会产生冲突!

我们继续以上面的例子为例,我重新执行了t2和t3提交,恢复到reset之前的状态:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
此时,我们按reset的思路,使用revert恢复到t1,执行命令:

git revert 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2
Nach dem Login kopieren
Nach dem Login kopieren

报错:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
提示冲突了?让我们解决掉冲突后提交…

<<<<<<< HEAD
Creating a new branch is quick 1 2.
=======
Creating a new branch is quick.
>>>>>>> parent of 8cbf16c (t1)
Nach dem Login kopieren

上面的冲突表示,当前的内容是:

Creating a new branch is quick 1 2.
Nach dem Login kopieren

而我们要恢复的内容是:

Creating a new branch is quick.
Nach dem Login kopieren

如果对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
Nach dem Login kopieren

执行后会自动进入编辑界面:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

这里需要我们修改或输入提交日志,按 “i”,进入输入状态,写完后按ESC退出输入状态,再按“:wq”退出!

成功后,执行 git push:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

查看仓库后台:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

项目目录:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

readme内容:

Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?

可见,revert操作成功后,产生了新的commit记录,t2对t1的修改已经恢复,现在的readme就是t1提交后的状态,但同时test文件仍然存在,即t3的提交不受影响!

Aber wenn Sie sagen, dass Sie die Übermittlungen von t2t3 genau wie beim Zurücksetzen löschen möchten, können Sie zuerst t3 und dann t2 zurücksetzen, was den gleichen Effekt erzielen kann. Aber warum nicht einfach in diesem Fall Reset verwenden? Wenn Sie den Effekt eines Zurücksetzens erzielen möchten und außerdem eine Aufzeichnung haben möchten, um Reue zu vermeiden, dann ist dies das Richtige für Sie. . . Es ist eine Frage, über die man nachdenken sollte!

Zusammenfassung des Unterschieds zwischen Git-Reset und Revert:

  • Reset ist ein vollständiges Rollback auf die angegebene Commit-Version, und alle Commits nach dem Commit werden gelöscht, einschließlich des Commit-Verlaufs ein Widerruf Die Änderung des angegebenen Commits wirkt sich nicht auf nachfolgende Commits aus, es tritt jedoch ein Konflikt auf, wenn der widerrufene Commit an derselben Stelle durch einen nachfolgenden Commit geändert wird.
  • Reset generiert nach der Ausführung keine Datensätze, aber durch „Zurücksetzen“ werden danach Datensätze generiert Ausführung;
  • Zurücksetzen Es kann nach der Ausführung nicht wiederhergestellt werden, es werden keine neuen Datensätze gelöscht, sodass die Dateien nicht verloren gehen, um den Zustand vor einem wiederherzustellen bestimmte Änderung;
  • HEAD wird nach der Ausführung von Reset Move zurückgesetzt, während der HEAD von Revert immer vorwärts ist;
  • Sobald Sie die Grundprinzipien von Reset und Revert geklärt haben, werden Sie verstehen, welcher Befehl besser geeignet ist wie viel Uhr!

Tipps: Wählen Sie im IDEA-Entwicklungstool eine Datei aus, klicken Sie mit der rechten Maustaste auf die Git-Option und Sie werden ein Rollback finden:

Dies muss von Zurücksetzen und Zurücksetzen unterschieden werden. Rollback gehört nicht zu Die Funktion des Git-Befehls besteht darin, dass Sie ein Rollback durchführen können, nachdem eine Datei oder ein Code geändert, aber noch nicht festgeschrieben wurde, und wenn Sie sie in einen Zustand wiederherstellen möchten, der mit dem Remote-Warehouse-Code übereinstimmt Betrieb! Was ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?
Empfohlenes Lernen: „

Git Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Zurücksetzen und Zurücksetzen in Git?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage