ฉันใช้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 pop
git stash apply
อีกวิธีหนึ่งที่จะดูที่มันเป็นgit stash pop
git 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
เก็บและตรวจพบการเปลี่ยนแปลงบางอย่างในไฟล์ร่วมบางอย่างที่มีอยู่ในgit
repo
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 apply
Working
หากคุณต้องการใช้การเปลี่ยนแปลงที่เก็บไว้ด้านบนกับการเปลี่ยนแปลงที่ไม่มีการจัดฉากในปัจจุบันและลบที่เก็บนั้นเช่นกันคุณควรดำเนินการ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()
สามารถรับองค์ประกอบบนสุดได้เท่านั้น