Perbedaan antara pop git simpanan dan git simpanan berlaku

1024

Saya telah menggunakan git stash popcukup lama. Saya baru-baru tahu tentang git stash applyperintah. Ketika saya mencobanya, sepertinya berhasil sama git stash pop.

Apa perbedaan antara git stash popdan git stash apply?

Sandeep Raju Prabhakar
sumber

Jawaban:

1628

git stash pop membuang simpanan (paling atas, secara default) setelah menerapkannya, sedangkan git stash apply menyimpannya di daftar simpanan untuk kemungkinan nanti digunakan kembali (atau Anda dapat melakukannya kemudian git stash drop).

Ini terjadi kecuali jika ada konflik setelahnya git stash pop, dalam hal ini tidak akan menghapus simpanan, membiarkannya berperilaku seperti itu git stash apply.

Cara lain untuk melihatnya: git stash popadalah git stash apply && git stash drop.

John Zwinck
sumber
117
sebagai jawaban @ briankip dicatat di bawah ini, jika ada konflik ketika simpanan muncul, pop tidak akan menghapus simpanan (dan akan berperilaku seperti berlaku)
Kashif
Tampaknya bahkan jika perubahan yang tidak dipentaskan di cabang Anda sama dengan git stash pophasil, Anda masih akan mendapatkan kesalahan konflik.
DimP
79

Dapatkan tautan bermanfaat ini yang menyatakan perbedaannya, seperti yang dinyatakan John Zwinck dan kekurangannya git stash pop.

Sebagai contoh, katakan perubahan simpanan Anda bertentangan dengan perubahan lain yang telah Anda buat sejak pertama kali Anda membuat simpanan. Baik pop dan apply akan membantu memicu menggabungkan mode resolusi konflik, memungkinkan Anda untuk menyelesaikan konflik seperti itu dengan baik ... dan tidak ada yang akan menghilangkan simpanan, meskipun mungkin Anda mengharapkan pop juga. Karena banyak orang berharap simpanan hanya tumpukan sederhana, ini sering menyebabkan mereka membuka simpanan yang sama secara tidak sengaja kemudian karena mereka pikir simpanan itu hilang.

Tautan: http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/

briankip
sumber
6
Fakta tentang simpanan yang bertahan lama ketika sebuah pop gagal sebenarnya bukanlah suatu kelemahan, meskipun pada awalnya mungkin terlihat seperti itu.
Amalgovinus
65

git stash popmenerapkan elemen simpanan teratas dan menghapusnya dari tumpukan. git stash applymelakukan hal yang sama, tetapi meninggalkannya di tumpukan simpanan.

jchapa
sumber
43

Melihatnya dalam tindakan mungkin membantu Anda lebih memahami perbedaan.

Dengan asumsi kami sedang mengerjakan mastercabang dan memiliki file hello.txtyang berisi string "Halo".

Mari kita modifikasi file dan tambahkan string "world" ke dalamnya. Sekarang Anda ingin pindah ke cabang lain untuk memperbaiki bug kecil yang baru saja Anda temukan, jadi Anda perlu melakukan stashperubahan:

git stash

Anda pindah ke cabang lain, memperbaiki bug dan sekarang Anda siap untuk terus bekerja di mastercabang Anda , sehingga Anda popberubah:

git stash pop

Sekarang jika Anda mencoba meninjau konten simpanan Anda akan mendapatkan:

$ git stash show -p
No stash found.

Namun, jika Anda menggunakan git stash applysebaliknya, Anda akan mendapatkan konten simpanan tetapi Anda juga akan menyimpannya:

$ git stash show -p
diff --git a/hello.txt b/hello.txt
index e965047..802992c 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-Hello
+Hello world

Jadi popsama seperti tumpukan pop - itu benar-benar menghapus elemen begitu muncul, sementara applylebih seperti mengintip .

Maroun
sumber
5

In git simpanan adalah area penyimpanan tempat file yang diubah saat ini dapat dipindahkan.

stasharea berguna ketika Anda ingin menarik beberapa perubahan dari gitrepositori dan mendeteksi beberapa perubahan dalam beberapa file bersama yang tersedia di gitrepo.

git stash apply //apply the changes without removing stored files from stash area.

git stash pop  // apply the changes as well as remove stored files from stash area.

Catatan: - git applyhanya menerapkan perubahan dari area simpanan sambil git popmenerapkan serta menghapus perubahan dari stasharea.

Vikrant Kashyap
sumber
1

Git Stash Pop vs applyBekerja

Jika Anda ingin menerapkan perubahan simpanan teratas Anda untuk perubahan yang tidak dipentaskan saat ini dan menghapus simpanan itu juga, maka Anda harus melakukannya git stash pop.

# apply the top stashed changes and delete it from git stash area.
git stash pop  

Tetapi jika Anda ingin menerapkan perubahan simpanan teratas Anda ke perubahan tidak dipentaskan saat ini tanpa menghapusnya, maka Anda harus melakukannya git stash apply.

Catatan: Anda dapat menghubungkan kasus ini dengan Stackkelas pop()dan peek()metode, di mana pop mengubah bagian atas dengan penurunan (atas = atas-1) tetapi peek()hanya bisa mendapatkan elemen atas.

Vikrant Kashyap
sumber