Git Shelve vs Stash


275

ฉันไม่คุ้นเคยกับshelveแง่มุมของ Git มาก หากstashใช้เพื่อทิ้งงานที่ยังไม่เสร็จอะไรคือshelveอะไร? คุณจะใช้มันเพื่ออะไร

ตัวอย่างเช่นใน Update Project (จากเมนู VCS)

ป้อนคำอธิบายรูปภาพที่นี่

หนึ่งจะได้รับ (ในความคิด 2019.2)

ป้อนคำอธิบายรูปภาพที่นี่


14
shelveไม่ใช่คำสั่ง git อะไรคือบริบทสำหรับคำถามนี้คำเหล่านี้มาจากไหน shelveมีอยู่ในเครื่องมืออื่น ๆ แต่ไม่ได้เป็นส่วนหนึ่งของคอมไพล์
Jonah

2
Git stash คล้ายกับshelveใน bzr, hg เป็นต้นคุณหมายถึงแพ็คเกจการทำงานร่วมกันของ git หรือไม่?
drRobertz

3
มากกว่า upvotes มากกว่าคำตอบที่ยอมรับอาจยืนยันคำถามนี้ถูกต้องและคำว่า '' Shelve "ถูกเข้าใจผิดอย่างเท่าเทียมกันเป็นคำสั่ง git ขอบคุณที่ถามนี่เป็นข้อสงสัยของฉันด้วย (จาก IDEA ด้วย)
PravyNandas

คำตอบ:


266

git shelve ไม่มีอยู่ใน Git

เท่านั้นgit stash:

  • เมื่อคุณต้องการบันทึกสถานะปัจจุบันของไดเรกทอรีทำงานและดัชนี แต่ต้องการกลับไปที่ไดเรกทอรีทำงานที่สะอาด
  • ซึ่งบันทึกการปรับเปลี่ยนในเครื่องของคุณออกไปและเปลี่ยนไดเรกทอรีทำงานให้ตรงกับการมอบหมาย HEAD

คุณมีโครงการเก่า ๆคอมไพล์ 2008 เพื่อแยกการแก้ไขในสาขา แต่ที่จะไม่มีประโยชน์มากในปัจจุบัน

ดังที่มีการบันทึกไว้ในกล่องโต้ตอบชั้นวางของ Intellij IDEAคุณลักษณะ "การเก็บเข้าลิ้นชักและการแยกชั้น " ไม่ได้เชื่อมโยงกับเครื่องมือ VCS (ระบบควบคุมเวอร์ชัน) แต่เชื่อมต่อกับ IDE เองเพื่อจัดเก็บการเปลี่ยนแปลงที่รอดำเนินการชั่วคราว

โปรดทราบว่าตั้งแต่ Git 2.13 (Q2 2017) ตอนนี้คุณสามารถซ่อนไฟล์แต่ละไฟล์ได้เช่นกัน


73
ปรากฎว่าฉันเข้าใจผิดแนวคิด ฉันคิดว่ามันเป็นคำสั่ง Git ในความเป็นจริงมันเป็นสิ่งที่บุคคลที่สามจาก IntelliJ IDEA ฉันหาเอกสาร git ไม่ได้เพราะคิดว่าฉันหายไปบางอย่าง jetbrains.com/idea/help/shelving-and-unshelving-changes.html
Edgar Martinez

2
ลิงก์เอกสารของคุณระบุว่า "ชั้นวาง" เป็นชุดของการเปลี่ยนแปลง (แก้ไข) ที่จัดการโดย IntelliJ IDE เท่านั้นยกเลิกการลิงก์ "หยุด" ซึ่งเป็นสิ่งมาตรฐานที่จัดการโดย Git ดังนั้นหลีกเลี่ยงชั้นวาง
barbara.post

2
@jerry chin shelve ดีกว่าที่เก็บไว้ในกระเป๋าของคุณ ฉันหวังว่าชั้นวางมีอยู่ในคอมไพล์ Webstorm ดูด RAM ออก มันจะมีประโยชน์ถ้าคอมไพล์ได้เราสามารถเรียกใช้ในบรรทัด cmd
digender mahara

2
มีกรณีการใช้งานทั่วไปที่ชั้นวางมีที่ซ่อนไม่ได้จัดการกับการปฏิบัติงานของเพื่อนร่วมงาน / บริษัท ที่มีปัญหา เป็นไปได้สำหรับขยะที่สมบูรณ์เพื่อเพิ่มไปยังที่เก็บของคุณและเพื่อที่จะไม่ยอมแพ้ในการ 'แก้ไข' เพราะความบ้าของใครบางคน ทางเลือกเป็นสิ่งที่ชอบgit stash && <your actual command> && git stash popแต่ที่ดูด Auto-Shelve และการสมัครนั้นใกล้เคียงกับที่เราต้องการ
ฉลาด

1
@VonC ไม่เหมือนกัน - ฉันมีกรณีการใช้งานที่โครงการที่ฉันใช้มีการตั้งค่าที่ฉันไม่สามารถกำหนดได้เพราะพวกเขา 'ไม่ได้มาตรฐาน' และอีกครึ่งโหลกรณีการใช้งานอื่น ๆ ที่ฉันได้เจอเกี่ยวกับสิ่งต่าง ๆ เช่นต้องการแก้ไขไฟล์บิวด์ ฯลฯ สำหรับการพัฒนาในท้องถิ่น vs dev / test / prod
ฉลาด

187

เมื่อใช้ JetBrains IDE's กับ Git การกระทำ "การ stashing และ unstashing ได้รับการสนับสนุนนอกเหนือจากการเก็บเข้าลิ้นชักและการแยกชั้นคุณสมบัติเหล่านี้มีเหมือนกันมากความแตกต่างที่สำคัญคือวิธีการสร้างและนำแพทช์มาใช้ Shelve สามารถทำงานกับไฟล์ จากไฟล์ในขณะที่ Stash สามารถทำงานกับไฟล์ที่มีการเปลี่ยนแปลงทั้งหมดในคราวเดียวนี่คือรายละเอียดเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างไฟล์ทั้งสอง "


10
มันดูเหมือนว่าจะดองมีความยืดหยุ่นมากขึ้นกว่าที่ซ่อนคอมไพล์
Dmitry Davydov

12
@DmitryDavydov มีgit stash -pที่สำคัญกว่าทั้งสอง น่าเสียดายเฉพาะในบรรทัดคำสั่ง
Vee

1
@TheVee ใช่มันคล้ายกับชั้นวางของในแง่ของฟังก์ชั่นขอบคุณสำหรับข้อมูล
Dmitry Davydov

10
ที่จริงแล้วตั้งแต่Git 2.13 (Q2 2017) คุณสามารถซ่อนไฟล์แต่ละไฟล์ได้ ... read more
kyb

5
ฉันพบว่าshelveมีประโยชน์มากเมื่อคุณมีแพทช์ของการเปลี่ยนแปลงที่คุณต้องการใช้ทุกครั้งที่คุณต้องการสร้างเอกสารอัตโนมัติเช่น Shelve จะสร้างไฟล์ภายใน .idea / shelve และคุณสามารถเพิ่มลงใน VCS ของคุณและแชร์กับทีมของคุณเพื่อให้พวกเขาสามารถใช้การเปลี่ยนแปลงเหล่านั้นและดำเนินงานเดียวกัน
ingkevin

63

นอกเหนือจากคำตอบก่อนหน้ามีสิ่งสำคัญอย่างหนึ่งสำหรับฉันคือ

shelveเป็นผลิตภัณฑ์ที่มี JetBrains (เช่นWebStorm, PhpStorm, PyCharmฯลฯ ) มันทำให้ไฟล์ที่ถูกพับเก็บลงใน.idea/shelfไดเรกทอรี

stashเป็นหนึ่งในgitตัวเลือก มันทำให้ไฟล์ที่ถูกซ่อนอยู่ภายใต้.gitไดเรกทอรี


2
ขอบคุณสำหรับการชี้แจงคำถามที่สำคัญนี้
AmerllicA

4

ฉันต้องการระงับการเปลี่ยนแปลงแทนที่จะหยุดพวกเขาหากฉันไม่ได้แชร์การเปลี่ยนแปลงของฉันที่อื่น

การสะสมเป็นคุณสมบัติคอมไพล์และไม่ได้ให้ตัวเลือกในการเลือกไฟล์เฉพาะหรือการเปลี่ยนแปลงภายในไฟล์ การเก็บเข้าลิ้นชักสามารถทำได้ แต่นี่เป็นฟีเจอร์เฉพาะของ IDE ไม่ใช่ฟีเจอร์คอมไพล์:

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นฉันสามารถเลือกที่จะระบุไฟล์ / บรรทัดที่จะรวมไว้ในชั้นวางของฉัน โปรดทราบว่าฉันไม่สามารถทำได้ด้วยการซ่อนเร้น

ระวังการใช้ชั้นวางใน IDE อาจ จำกัด ความสามารถในการพกพาของแพตช์ของคุณเนื่องจากการเปลี่ยนแปลงเหล่านั้นไม่ได้เก็บไว้ในโฟลเดอร์. git

ลิงค์ที่เป็นประโยชน์บางส่วน:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.