Rumah > Artikel > alat pembangunan > Penjelasan terperinci tentang git-reset untuk pembelajaran arahan Git
Fungsi git-reset adalah untuk menetapkan semula penuding HEAD cawangan semasa dan menghalakan penuding HEAD ke keadaan tertentu.
git reset [<tree-ish>] [--] <pathspec> git reset [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>] git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>] git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [<commit>]
Fungsi arahan set semula dalam tiga baris pertama adalah untuk menggunakan kandungan
Ia adalah sesuatu seperti pokok. Terdapat banyak perkara dalam git yang boleh membentuk pokok, seperti pokok komit atau pokok tag.
Fungsi arahan set semula dalam baris terakhir adalah untuk menghalakan penuding HEAD cawangan semasa ke
Dalam semua borang arahan di atas,
git reset [
Kaedah ini mempunyai peraturan berikut:
akan menetapkan semula sumber laluan yang sepadan dengan
Perubahan yang diserahkan kepada cache akan dipulihkan ke ruang kerja.
Contohnya?
Andaikan terdapat fail coffee.txt dalam projek tersebut >Kami menggunakan arahan git tag Tandakan versi semasa sebagai v1.0.0 (gunakan tag tag di sini).
卡布奇诺纳瑞冰-19.9¥ 标准美式-14.9¥ 香草拿铁-19.9¥ 生椰爱摩卡-19.9¥ ...Kemudian ubah suai fail coffee.txt, kandungan pengubahsuaian adalah seperti berikut:
Selepas menukar fail coffee.txt, gunakan tag git untuk menandakannya dengan v1.0.1.
卡布奇诺纳瑞冰-19.9¥ --> 卡布奇诺纳瑞冰-14.9¥ 标准美式-14.9¥ --> 标准美式-9.9¥ 香草拿铁-19.9¥ --> 香草拿铁-14.9¥ 生椰爱摩卡-19.9¥ --> 生椰爱摩卡-14.9¥ ...Jika anda ingin memulihkan fail coffee.txt ke fail dalam v1.0.0 pada masa ini, anda boleh menggunakan arahan git reset dan tentukan ia sebagai v1.0.0 Operasi adalah seperti berikut:
Gunakan VSCode untuk melihat perubahan fail dalam kawasan cache:
git reset v1.0.0 coffee.txt
Anda boleh melihat perbandingan perubahan kod di sebelah kanan gambar. Pada masa ini, fail coffee.txt dalam kawasan cache telah berjaya Ditetapkan semula kepada keadaan fail dalam v1.0.0 (Peraturan 1). Dan pada masa ini, perubahan yang v1.0.1 telah diserahkan kepada cache juga telah dipulihkan kepada pokok kerja (Peraturan 2).
Ia boleh dilihat bahawa arahan git reset dan arahan git add mempunyai kesan yang bertentangan Satu ialah menambah sumber yang ditentukan ke kawasan cache, dan satu lagi adalah untuk keluarkannya dari kawasan cache. Dan arahan ini mempunyai kesan yang sama seperti git restore [--source=
Anda juga boleh memilih untuk memulihkan kandungan ruang kerja seperti yang diperlukan:
git restore coffee.txt --staged
git restore coffee.txt --worktreegit reset [--pathspec-from-file=
Dalam contoh di atas, tetapan semula dan pemulihan adalah sama setiap kali
交互式的选择 git reset [ 该命令会把当前分支的HEAD指针指向某个 工作区和缓存区中的文件变动都将被保留,然后将HEAD指针指向 还是以咖啡菜单为?,假如第一次commit到仓库中的文件内容如下: 然后做第二次commit操作,删除标准美式,增加生椰拿铁: 在commit后,修改卡布奇诺纳瑞冰的价格,添加到缓存区。再修改香草拿铁的价格,保留在工作区: 此时我想保留工作区和缓存区做的改动,并且将HEAD指针指向第一次commit。这时可以使用--soft选项实现: 使用git log查看当前HEAD指针确实已经指向第一个commit,第二个commit被抛弃了: 同时所有的工作区和缓存区的改动都被保留了: 当前只有两次的commit,是为了方便演示--soft选项的作用。但是在实际开发中,我们可能会commit多次,尤其是在测试环境改几个BUG就要提交到发布平台,这样会导致很多无意义的commit。这时候就可以使用--soft选项,重置HEAD到指定的 重置缓存区,但是会保留工作区的内容,这是 相信在理解了--soft作用后,理解--mixed不难,上面例子中如果是使用--mixed那么最终结果如下: 该选项会重置缓存区,但是保留工作区的改动,并将当前指针指向 重置缓存区和工作区中的所有的变动,并且将指针指向 --hard更加的简单粗暴,我们将--soft例子改为--hard来查看结果: 如图所示,工作区和缓存区的内容都被重置了。不止是如此,就连Untracked文件同样也会被删除。 该选项的作用,看字面意思就知道大概就是把当前分支和指定的 重置缓存区,任何已经添加到缓存区的改动都将被抛弃 如果 如果 如果一个文件在 我们举个例子来验证一下以上列出的规则,假设此时的咖啡店项目有如下的几个commit。 第一个commit和文件内容如下: 第一个commit中只有一个coffee.txt菜单文件,此时如果咖啡店引进了新品种开始卖果汁,那么就需要新增果汁菜单文件fruits.txt,于是就有了第二个commit: 此时我们做一些改动来验证1,2,4这几点的规则,改动后的文件如下: 首先修改coffee.txt文件,新增一款生椰拿铁咖啡,保留在工作区中。然后增加咖啡豆菜单文件beans.txt,将其添加到缓存区中。 假设因需求变动,咖啡豆菜单文件在缓存区中需要清除,果汁菜单文件需要删除,只有咖啡菜单中新增的生椰拿铁的改动需要保留。那么就可以使用git reset --merge将HEAD和commit-1进行合并,操作如下: 结果如下: 执行命令reset命令产生了如下效果: 再来验证一下第3点规则,假设咖啡店项目此时第一个commit如下: 接下去同样新增水果茶菜单,然后再修改coffee.txt文件,第二个commit如下: 然后在HEAD中再修改coffee.txt文件,删除掉标准美式品种: 此时,如果我们再使用git reset --merge HEAD^就无法再进行重置,该操作会被git终止(规则3)。并且控制台会进行报错提示: 该选参的作用和--merge相似,唯一的区别就是缓存区中被重置的会被保留在工作区中。 构造如下第一个commit: 改造第二个commit: 在HEAD中进行修改 使用git reset --keep命令: 从结果上来看,只有fruits.txt文件被删除了,beans.txt文件被重置回了工作区中。coffee.txt文件的改动也被保留了。 使用该选项可以控制是否递归的重置submdoule。如果想要更详细了解,查看这篇文章。 git-reset命令的作用就是重置缓存区和工作区,同时它也提供多个选项来做更具体的控制,使得该命令更加灵活多变。git-reset命令在我们的工作中经常使用,因此熟练掌握该命令是非常重要的。 更多编程相关知识,请访问:编程入门!!--soft
卡布奇诺纳瑞冰-19.9¥
标准美式-14.9¥
香草拿铁-19.9¥
生椰爱摩卡-19.9¥
...
卡布奇诺纳瑞冰-19.9¥
-标准美式-14.9¥
+生椰拿铁-19.9¥
香草拿铁-19.9¥
生椰爱摩卡-19.9¥
...
-卡布奇诺纳瑞冰-19.9¥
+卡布奇诺纳瑞冰-14.9¥ // 添加到缓存区中
生椰拿铁-19.9¥
-香草拿铁-19.9¥
+香草拿铁-14.9¥ // 保留在工作区
生椰爱摩卡-19.9¥
...
git reset HEAD^ --soft // 这里使用HEAD^表示上一个commit,同样也可以使用hash id
--mixed
--hard
--merge
git reset --merge HEAD^
--keep
--[no-]recurse-submodules
总结
Atas ialah kandungan terperinci Penjelasan terperinci tentang git-reset untuk pembelajaran arahan Git. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!