git中stash的工作原理是什么?
淡淡烟草味
淡淡烟草味 2017-05-02 09:44:35
0
1
784

1.测试场景一:
假设index.html本来就在代码仓库中,现在修改了index.html页面,然后add暂存index.html页面,接着继续修改index.html页面,然后git stash,这个时候代码仓库干净了,修改被暂存,然后执行git stash pop,还原修改,这个时候发现,工作区的修改还原了,但是暂存区的修改丢失了。也就是git status发现,没有任何修改被暂存,之前暂存的修改被废弃了,但是工作区的修改完全被保留。

2.测试场景二:
现在添加test01.html页面,git status显示test01.html并没有被git跟踪,然后修改index.html文件,这个时候git stash,发现index.html文件被暂存,但是test01.html文件没有被暂存。也就是git status并没有暂存没有被git跟踪的文件。

3.测试场景三:
延续场景二,修改index.html文件,test01.html文件为新添文件,这个时候git add test01.html文件,让test01.html被git追踪,再git stash,通过git stash show方法可以看到test01.html文件被暂存,接着git stash pop,修改被还原,git status发现test01.html文件是被暂存状态,index.html还是被保留的工作区的修改。也就是git add 一个之前未被git追踪的文件,git stash后,这个文件会被暂存,而且git stash pop后,新添加的这个文件还是暂存状态,对比测试场景一中,index.html文件只是工作区的修改被暂存,暂存区的修改被丢失。

4.测试场景四:
延续场景三,修改index.html文件,test01.html文件为新添文件,这个时候git add test01.html文件,让test01.html被git追踪,然后再修改test01.html文件,接着git stash,git stash pop,发现test01.html依然是暂存状态,但是被暂存的文件内容却是工作区最终的修改内容。也就是git add 一个之前未被git追踪的文件,然后再修改这个文件,git stash后,这个文件会被暂存,而且git stash pop后,新添加的这个文件还是暂存状态,但是暂存的修改内容却是之前工作区的修改内容而不是通过add暂存的修改内容。


通过以上测试,我没有发现git stash的工作规律,非常晕,希望git高手给我指导分析一下。

淡淡烟草味
淡淡烟草味

membalas semua(1)
曾经蜡笔没有小新

Pertama sekali, izinkan saya menerangkan fungsi asas perintah git stash: mengendalikan keadaan kotor direktori kerja, iaitu fail penjejakan yang diubah suai dan perubahan sementara , dan kemudian Pengubahsuaian yang belum selesai disimpan pada timbunan . Selepas mengetahui perkara ini, mari kita lihat beberapa perkara penting yang saya rumuskan:

    Perintah
  • git stash akan menolak fail yang dijejaki ke dalam tindanan, manakala fail yang tidak dikesan tidak akan ditolak ke dalam tindanan, seperti yang diterangkan dalam eksperimen poster 2.

  • Jika kerja sebelumnya telah ditambahkan pada kawasan storan sementara , perintah git stash tidak akan menambah pengubahsuaian yang memunculkan tindanan ke kawasan storan sementara secara lalai, seperti yang diterangkan dalam eksperimen poster 1 Begitulah keadaannya, tetapi penerangan poster sebenarnya salah Pengubahsuaian yang disimpan sementara sebelum ini tidak ditinggalkan atau hilang tetapi kekal di kawasan kerja, tetapi tidak ditambahkan ke kawasan simpanan sementara.

  • Mengenai fail yang baru ditambahkan test01.html dalam eksperimen 2 dan 3 poster, ini sebenarnya situasi yang istimewa. Kita boleh memahaminya dengan cara ini: Hasil daripada stash pop adalah untuk memulihkan pengubahsuaian sebelumnya, dan operasi pemulihan yang boleh dilakukan untuk test01.html hanya boleh menyertai semula kawasan storan sementara. Jika tidak, test01.html akan kembali kepada wujud status tidak dijejaki.

  • Jika anda ingin menggunakan semula pengubahsuaian simpan sementara sebelumnya, anda boleh menambah pilihan git stash pop selepas --index, supaya anda boleh memulihkannya kepada keadaan yang sama seperti dahulu, iaitu, sementara sebelumnya Apa yang telah disimpan kini akan berada dalam keadaan sementara, dan apa yang disimpan sementara akan tetap berada dalam keadaan tidak berperingkat.

Akhir sekali, saya perlu menyatakan apa yang dikatakan oleh poster itu:

Pengubahsuaian yang disimpan sebelum ini telah dibuang

atau

Pengubahsuaian di kawasan pementasan telah hilang

Sebenarnya, penerangan itu salah, atau tidak sepatutnya diterangkan begini, kerana ia akan membuatkan kita salah faham - kita mungkin tersalah anggap bahawa git stash hanya akan menyimpan sementara pengubahsuaian ruang kerja , tetapi keadaan sebenar sepatutnya Seperti ini: git stash akan mengekalkan operasi yang dipulihkan dalam ruang kerja secara lalai, tetapi tidak akan mementaskannya semula secara automatik untuk anda .
Poster boleh membuat semula percubaan di atas untuk mengesahkan kenyataan saya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan