ฉันใช้git stash popมาระยะหนึ่งแล้ว ฉันเพิ่งค้นพบเกี่ยวกับgit stash applyคำสั่ง git stash popเมื่อฉันพยายามมันออกก็ลำบากในการทำงานเช่นเดียวกับ
ความแตกต่างระหว่างgit stash popและgit stash applyคืออะไร?
ฉันใช้git stash popมาระยะหนึ่งแล้ว ฉันเพิ่งค้นพบเกี่ยวกับgit stash applyคำสั่ง git stash popเมื่อฉันพยายามมันออกก็ลำบากในการทำงานเช่นเดียวกับ
ความแตกต่างระหว่างgit stash popและgit stash applyคืออะไร?
คำตอบ:
git stash pop โยนที่ซ่อน (สูงสุดโดยค่าเริ่มต้น) หลังจากนำไปใช้ในขณะที่git stash apply ทิ้งไว้ในรายการที่ซ่อนไว้เพื่อนำมาใช้ซ้ำในภายหลัง (หรือคุณสามารถเป็นไปgit stash dropได้)
นี้เกิดขึ้นเว้นแต่มีความขัดแย้งหลังซึ่งในกรณีนี้มันจะไม่ลบซ่อนออกมันจะทำตัวเหมือนgit stash popgit stash apply
อีกวิธีหนึ่งที่จะดูที่มันเป็นgit stash popgit stash apply && git stash drop
git stash popผลลัพธ์ของคุณจะยังคงได้รับข้อผิดพลาดความขัดแย้ง
มีการเชื่อมโยงที่เป็นประโยชน์ที่ระบุความแตกต่างในขณะที่จอห์น Zwinck git stash popได้ระบุไว้และข้อบกพร่องของ
ตัวอย่างเช่นสมมติว่าการเปลี่ยนแปลงที่คุณเก็บไว้ขัดแย้งกับการเปลี่ยนแปลงอื่น ๆ ที่คุณทำตั้งแต่คุณสร้างที่เก็บ ทั้งป๊อปและการนำไปใช้จะเป็นประโยชน์ในการรวมโหมดการแก้ไขข้อขัดแย้งเข้าด้วยกันซึ่งจะช่วยให้คุณแก้ไขข้อขัดแย้งดังกล่าวได้เป็นอย่างดี ... และจะไม่กำจัดที่ซ่อนแม้ว่าคุณอาจคาดหวังว่าป๊อปก็เช่นกัน เนื่องจากผู้คนจำนวนมากคาดหวังว่าการหยุดชะงักจะเป็นเพียงสแต็กง่ายๆนี่มักจะทำให้พวกเขาโผล่ที่เก็บซ่อนตัวเดียวกันโดยบังเอิญเพราะพวกเขาคิดว่ามันหายไป
ลิงก์: http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-considered-harmful/
git stash popใช้องค์ประกอบที่ซ่อนอยู่ด้านบนและลบออกจากสแต็ก git stash applyทำเช่นเดียวกัน แต่ทิ้งไว้ในสแต็กสะสม
การเห็นว่ามันทำงานจริงอาจช่วยให้คุณเข้าใจความแตกต่างได้ดีขึ้น
สมมติว่าเรากำลังทำงานในmasterสาขาและมีไฟล์hello.txtที่มีสตริง "Hello"
ลองแก้ไขไฟล์และเพิ่มสตริง "world" ลงไป ตอนนี้คุณต้องการย้ายไปที่สาขาอื่นเพื่อแก้ไขข้อบกพร่องเล็ก ๆ น้อย ๆ ที่คุณเพิ่งค้นพบดังนั้นคุณจำเป็นต้องstashเปลี่ยนแปลง:
git stash
คุณย้ายไปที่สาขาอื่นแก้ไขข้อผิดพลาดและตอนนี้คุณก็พร้อมที่จะทำงานmasterสาขาของคุณต่อไปดังนั้นคุณจึงpopทำการเปลี่ยนแปลง:
git stash pop
ตอนนี้ถ้าคุณลองทบทวนเนื้อหาที่ซ่อนคุณจะได้รับ:
$ git stash show -p
No stash found.
อย่างไรก็ตามหากคุณใช้git stash applyแทนคุณจะได้เนื้อหาที่เก็บไว้ แต่คุณจะต้อง:
$ 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
ดังนั้นpopเป็นเหมือนป๊อปสแต็คของ - มันจริงเอาองค์ประกอบหนึ่งครั้งก็โผล่ในขณะที่applyมีมากขึ้นเช่นแอบมอง
ในgit การสะสมเป็นพื้นที่จัดเก็บไฟล์ที่เปลี่ยนแปลงในปัจจุบันสามารถเคลื่อนย้ายได้
stashพื้นที่มีประโยชน์เมื่อคุณต้องการดึงการเปลี่ยนแปลงบางอย่างจากที่gitเก็บและตรวจพบการเปลี่ยนแปลงบางอย่างในไฟล์ร่วมบางอย่างที่มีอยู่ใน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.
หมายเหตุ: -
git applyใช้การเปลี่ยนแปลงจากพื้นที่เก็บข้อมูลในขณะที่git popใช้เท่านั้นรวมถึงนำการเปลี่ยนแปลงออกจากstashพื้นที่
Git Stash Pop vs applyWorking
หากคุณต้องการใช้การเปลี่ยนแปลงที่เก็บไว้ด้านบนกับการเปลี่ยนแปลงที่ไม่มีการจัดฉากในปัจจุบันและลบที่เก็บนั้นเช่นกันคุณควรดำเนินการgit stash popต่อ
# apply the top stashed changes and delete it from git stash area.
git stash pop
แต่ถ้าคุณต้องการที่จะใช้การเปลี่ยนแปลงที่ถูกจัดเก็บบนสุดของคุณกับการเปลี่ยนแปลงที่ไม่มีการจัดฉากในปัจจุบันโดยไม่ต้องลบมันคุณควรดำเนินการgit stash applyต่อ
หมายเหตุ: คุณสามารถเชื่อมโยงกรณีนี้กับ
Stackคลาสpop()และpeek()เมธอดโดยที่ pop เปลี่ยนด้านบนโดยการลดลง (top = top-1) แต่peek()สามารถรับองค์ประกอบบนสุดได้เท่านั้น