ฉันกำลังทำงานในสาขาหลักทำการเปลี่ยนแปลงบางอย่างแล้ว stashed พวกเขา ตอนนี้เจ้านายของฉันอยู่ที่ HEAD
แต่ตอนนี้ฉันต้องการเรียกการเปลี่ยนแปลงเหล่านี้ แต่กลับไปยังสาขาใหม่ที่แยกสาขาจากเวอร์ชัน HEAD ของสาขาหลัก
ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันกำลังทำงานในสาขาหลักทำการเปลี่ยนแปลงบางอย่างแล้ว stashed พวกเขา ตอนนี้เจ้านายของฉันอยู่ที่ HEAD
แต่ตอนนี้ฉันต้องการเรียกการเปลี่ยนแปลงเหล่านี้ แต่กลับไปยังสาขาใหม่ที่แยกสาขาจากเวอร์ชัน HEAD ของสาขาหลัก
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ขั้นตอนมาตรฐานไม่ทำงานหรือไม่
git stash savegit branch xxx HEADgit checkout xxxgit stash popสั้น:
git stashgit checkout -b xxxgit stash popgit stash save "description"คำสั่งที่กล่าวถึงก่อนหน้านี้; แล้วฉันgit clearสาขา (สำหรับ trashing ไดเรกทอรีทำงานจริง) และจากนั้นgit stash apply stash@{my_desired_stash}ในสาขาที่ต้องการ (หลังจากเปลี่ยนไปที่ด้วยgit checkout <branch>ชัด) ฉันรู้ว่ามันไม่ได้เป็นวิธีการแก้ปัญหาจริง แต่ที่ดีที่สุดคือคุณสามารถทำกับคอมไพล์
git stash dropเมื่อฉันตกลง
เนื่องจากคุณได้ทำการเปลี่ยนแปลงแล้วสิ่งที่คุณต้องมีคือสายการบินเดียว:
git stash branch <branchname> [<stash>]จากเอกสาร ( https://www.kernel.org/pub/software/scm/git/docs/git-stash.html ):
สร้างและตรวจสอบสาขาใหม่ที่ชื่อ < branchname > เริ่มต้นจากการคอมมิชชันที่ < stash > ถูกสร้างขึ้นในตอนแรกใช้การเปลี่ยนแปลงที่บันทึกไว้ใน < stash > กับแผนผังการทำงานและดัชนีใหม่ หากประสบความสำเร็จและ < stash > เป็นการอ้างอิงของ form stash @ {< revision >} มันจะดรอป < stash > เมื่อไม่ได้รับ < stash > ให้ใช้ตัวล่าสุด
สิ่งนี้มีประโยชน์หากสาขาที่คุณใช้บันทึก git stash มีการเปลี่ยนแปลงมากพอที่การเก็บ git นั้นล้มเหลวเนื่องจากความขัดแย้ง เนื่องจากที่เก็บถูกนำไปใช้บนการคอมมิทที่เป็น HEAD ในขณะที่ git stash ถูกรันมันจะกู้คืนสถานะ stashed ดั้งเดิมโดยไม่มีข้อขัดแย้ง
หากคุณมีการเปลี่ยนแปลงบางอย่างในเวิร์กสเปซของคุณและคุณต้องการซ่อนไว้ในสาขาใหม่ให้ใช้คำสั่งนี้:
git stash branch branchName
มันจะทำให้:
- สาขาใหม่
- ย้ายการเปลี่ยนแปลงไปยังสาขานี้
- และลบที่ซ่อนล่าสุด (ไลค์: git stash pop)