Rumah  >  Artikel  >  alat pembangunan  >  Apakah perbezaan antara set semula dan kembalikan dalam git

Apakah perbezaan antara set semula dan kembalikan dalam git

青灯夜游
青灯夜游asal
2021-11-30 14:57:2525802semak imbas

Perbezaan: 1. Set semula ialah pemulangan semula sepenuhnya kepada versi komit yang ditentukan, dan semua komit selepas komit akan dikosongkan manakala revert hanya membatalkan pengubahsuaian komit yang ditentukan dan tidak menjejaskan komit berikutnya. 2. Tiada rekod akan dijana selepas penetapan semula dilaksanakan, tetapi rekod akan dijana selepas pengembalian dilaksanakan.

Apakah perbezaan antara set semula dan kembalikan dalam git

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi Git 2.30.0, komputer Dell G3.

Git ialah alat pengurusan versi kami yang biasa digunakan Apabila pasukan kami bekerjasama untuk membangunkan projek, pelbagai konflik sering berlaku disebabkan oleh pengubahsuaian dan penyerahan kod dan fail, serta perubahan yang kerap dalam keperluan produk, mengakibatkan Kami mempunyai. untuk membuat keputusan untuk melancarkan semula versi dan menarik balik penyerahan, jadi pada masa ini, arahan tetapan semula dan kembalikan berguna!

Tetapkan semula dan kembalikan kedua-duanya mempunyai maksud membatalkan dan melancarkan semula, tetapi masing-masing mempunyai kelebihan tersendiri dan perbezaannya masih sangat besar , jadi arahan mana yang hendak digunakan mesti diputuskan berdasarkan situasi sebenar. Artikel ini ialah Biarkan semua orang memahami perbezaan antara kedua-duanya, dan kemudian gunakan arahan yang betul dengan tepat dan cepat untuk menyelesaikan masalah praktikal!

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

Artikel ini mengambil git bash sebagai contoh:

Apakah perbezaan antara set semula dan kembalikan dalam git
Mari kita bincangkan tentang penetapan semula dahulu:

set semula, penggunaan: git reset --hard commit, komit ialah SHA1 yang dijana selepas penyerahan Selepas melaksanakan arahan ini, kod akan kembali sepenuhnya kepada keadaan penyerahan ini jelas sepenuhnya, termasuk rekod komit!

Contoh:

Projek asal, termasuk fail Readme.txt:
Apakah perbezaan antara set semula dan kembalikan dalam git
Kandungan fail:
Apakah perbezaan antara set semula dan kembalikan dalam git
Pada ketika ini saya akan mengubah suai kandungan fail sebagai:

Mencipta cawangan baharu adalah pantas 1.

Jadikan yang pertama penyerahan :
Apakah perbezaan antara set semula dan kembalikan dalam git
Rekod penyerahan:
Apakah perbezaan antara set semula dan kembalikan dalam git
Direktori gudang jauh dan kandungan fail yang diserahkan:

Apakah perbezaan antara set semula dan kembalikan dalam gitApakah perbezaan antara set semula dan kembalikan dalam git
Tidak masalah, teruskan mengubah suai kandungan fail: Mencipta cawangan baharu adalah pantas 1 2. dan buat penyerahan kedua:
Apakah perbezaan antara set semula dan kembalikan dalam git
Sekarang saya akan menambah fail ujian dan membuat penyerahan ketiga:
Apakah perbezaan antara set semula dan kembalikan dalam git
Apakah perbezaan antara set semula dan kembalikan dalam gitApakah perbezaan antara set semula dan kembalikan dalam git

Baiklah, sekarang keperluan produk telah berubah fungsi baru (pengubahsuaian kedua readme dan fail ujian baharu) tidak diperlukan lagi untuk kembali ke penyerahan pertama "t1". commit to t1 boleh disalin daripada sejarah komit gudang jauh, atau anda boleh melihatnya dengan arahan

:

git log

Apakah perbezaan antara set semula dan kembalikan dalam git (Petua, jika ":" muncul pada baris terakhir , kemudian masukkan wq untuk keluar dan kembali ke baris arahan )
Salin komit dan laksanakan arahan:

git reset --hard 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2

Apakah perbezaan antara set semula dan kembalikan dalam git segera, HEAD telah menjadi Points to t1, tetapi apabila anda menyegarkan latar belakang, anda mendapati bahawa tiada perubahan Ini kerana kita masih perlu melakukan push, tetapi apa yang perlu diperhatikan di sini ialah kod tempatan telah dikembalikan versi lama, tetapi gudang jauh adalah versi baharu yang tidak konsisten dengan yang tempatan, jadi anda akan mendapat ralat apabila menggunakan git push Di sini kita perlu menggunakan penyerahan paksa,

, kita juga boleh menggunakan

untuk melihat status semasa: git push -fgit status

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

![Apakah perbezaan antara set semula dan kembalikan dalam git](https://img-blog.csdnimg.cn/94c3e93f6efe40b6a4d12d02eb05cd4d.png

再看仓库:

Apakah perbezaan antara set semula dan kembalikan dalam git

历史记录只剩下了t1:

Apakah perbezaan antara set semula dan kembalikan dalam git

readme内容也得到了恢复:

Apakah perbezaan antara set semula dan kembalikan dalam git

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

优点

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

缺点

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

再说revert

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

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

Apakah perbezaan antara set semula dan kembalikan dalam git
Apakah perbezaan antara set semula dan kembalikan dalam git
此时,我们按reset的思路,使用revert恢复到t1,执行命令:

git revert 8cbf16c0821d20fe42c361f4e3d75a0493dc5fc2

报错:

Apakah perbezaan antara set semula dan kembalikan dalam git
提示冲突了?让我们解决掉冲突后提交…

<<<<<<< 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

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

Apakah perbezaan antara set semula dan kembalikan dalam git

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

成功后,执行 git push:

Apakah perbezaan antara set semula dan kembalikan dalam git

查看仓库后台:

Apakah perbezaan antara set semula dan kembalikan dalam git

项目目录:

Apakah perbezaan antara set semula dan kembalikan dalam git

readme内容:

Apakah perbezaan antara set semula dan kembalikan dalam git

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

Tetapi jika anda ingin memadamkan penyerahan t2t3 seperti tetapan semula, maka anda boleh kembalikan t3 dahulu, dan kemudian kembalikan t2, yang boleh mencapai kesan yang sama Tetapi dalam kes ini, mengapa tidak menggunakan tetapan semula ? Jika anda ingin mencapai kesan penetapan semula dan juga ingin mempunyai rekod untuk mengelakkan penyesalan, maka ini sahaja. . . Ia satu soalan yang patut difikirkan!

Ringkasan perbezaan antara git reset dan revert:

  • reset ialah rollback lengkap kepada versi commit yang ditentukan, selepas commit Semua commit akan dikosongkan, termasuk sejarah commit;
  • revert hanya membatalkan pengubahsuaian commit yang ditentukan dan tidak menjejaskan commit berikutnya Walau bagaimanapun, jika commit yang dibatalkan diubah suai di tempat yang sama oleh commit berikutnya, ia akan berlaku. dikosongkan selepas pengembalian dilaksanakan, dan rekod baharu akan dijana , jadi fail tidak akan hilang Anda boleh melaksanakan kembali beberapa kali untuk memulihkan kepada keadaan sebelum perubahan tertentu
  • HEAD akan bergerak ke belakang selepas penetapan semula dilaksanakan, manakala HEAD revert akan sentiasa bergerak ke hadapan;
  • Selepas menjelaskan prinsip asas tetapan semula dan kembalikan, anda akan memahami arahan mana yang lebih sesuai digunakan pada waktu berapa!

Petua

: Dalam alat pembangunan IDEA, pilih fail, klik kanan pada pilihan git dan anda akan temui Rollback Ini perlu dibezakan daripada reset dan revert bukan milik perintah git diubah suai tetapi belum dilakukan Apabila keadaan konsisten dengan kod gudang jauh, anda boleh melakukan operasi rollback!

Pembelajaran yang disyorkan: "Apakah perbezaan antara set semula dan kembalikan dalam gitTutorial Git
"

Atas ialah kandungan terperinci Apakah perbezaan antara set semula dan kembalikan dalam git. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn