เนื่องจาก git เป็นพื้นฐานเกี่ยวกับการจัดการเนื้อหาและดัชนีของที่เก็บทั้งหมด(และไม่ใช่ไฟล์หนึ่งหรือหลายไฟล์) git stash
ข้อเสนอไม่น่าแปลกใจกับไดเรกทอรีทำงานทั้งหมด.
ที่จริงแล้วตั้งแต่ Git 2.13 (Q2 2017) คุณสามารถซ่อนไฟล์แต่ละไฟล์ด้วยgit stash push
:
git stash push [--] [<pathspec>...]
เมื่อpathspec
มอบให้กับ ' git stash push
' stash ใหม่จะบันทึกสถานะการแก้ไขเฉพาะไฟล์ที่ตรงกับ pathspec ดู " Stash เปลี่ยนแปลงไปยังไฟล์ที่ระบุ " สำหรับข้อมูลเพิ่มเติม
ตัวอย่างที่ง่าย:
git stash push path/to/file
กรณีทดสอบสำหรับคุณสมบัตินี้แสดงตัวเลือกเพิ่มเติมไม่กี่ตัว
test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
git add foo bar extra &&
git stash push -- foo bar &&
test_path_is_missing bar &&
test_path_is_missing foo &&
test_path_is_file extra &&
git stash pop &&
test_path_is_file foo &&
test_path_is_file bar &&
test_path_is_file extra
คำตอบเดิม (ด้านล่างมิถุนายน 2010) เป็นเรื่องเกี่ยวกับการเลือกสิ่งที่คุณต้องการซ่อนด้วยตนเอง
ความคิดเห็นCasebash :
นี้ ( stash --patch
โซลูชันดั้งเดิม) ดี แต่บ่อยครั้งที่ฉันแก้ไขไฟล์จำนวนมากดังนั้นการใช้โปรแกรมปะแก้น่ารำคาญ
bukzor 's คำตอบ (upvoted กันยายน 2011) แสดงให้เห็นวิธีการแก้ปัญหาการปฏิบัติมากขึ้นบนพื้นฐาน+
git add
git stash --keep-index
ไปดูและโหวตคำตอบของเขาซึ่งควรจะเป็นคำตอบที่เป็นทางการ (แทนที่จะเป็นของฉัน)
เกี่ยวกับตัวเลือกนั้นchhhชี้ให้เห็นเวิร์กโฟลว์ทางเลือกในความคิดเห็น:
คุณควร " git reset --soft
" หลังจาก stash ดังกล่าวเพื่อรับ staging กลับของคุณชัดเจน:
เพื่อไปยังสถานะดั้งเดิม - ซึ่งเป็นพื้นที่ staging ที่ชัดเจนและมีการปรับเปลี่ยนที่ไม่เลือกฉากบางตัวสามารถรีเซ็ตดัชนีเบา ๆ เพื่อรับ (โดยไม่ต้อง กระทำการใด ๆ เช่นคุณ - bukzor - ทำ)
(คำตอบเดิมมิถุนายน 2010: คู่มือสะสม)
ทว่าgit stash save --patch
สามารถช่วยให้คุณประสบความสำเร็จในการทำบางส่วน:
ด้วย--patch
คุณสามารถเลือกนักล่าจากในส่วนต่างระหว่าง HEAD และแผนผังการทำงานที่จะซ่อน
รายการ stash ถูกสร้างขึ้นเพื่อให้สถานะดัชนีเหมือนกับสถานะดัชนีของที่เก็บของคุณและ worktree มีเฉพาะการเปลี่ยนแปลงที่คุณเลือกแบบโต้ตอบ การเปลี่ยนแปลงที่เลือกจะถูกย้อนกลับจาก worktree ของคุณ
อย่างไรก็ตามนั่นจะบันทึกดัชนีแบบเต็ม (ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการเนื่องจากอาจรวมไฟล์อื่น ๆ ที่จัดทำดัชนีไว้แล้ว) และ worktree บางส่วน (ซึ่งอาจดูเหมือนที่คุณต้องการซ่อน)
git stash --patch --no-keep-index
อาจจะเป็นแบบที่ดีกว่า
ถ้า--patch
ไม่ทำงานกระบวนการที่ทำด้วยมืออาจจะ:
สำหรับไฟล์เดียวหรือหลายไฟล์โซลูชันระดับกลางจะเป็น:
- คัดลอกนอก Git repo
(ที่จริงแล้วeleotlecramเสนอทางเลือกที่น่าสนใจ )
git stash
- คัดลอกกลับ
git stash
# เวลานี้เฉพาะไฟล์ที่คุณต้องการถูกซ่อน
git stash pop stash@{1}
# นำการแก้ไขไฟล์ของคุณมาใช้อีกครั้ง
git checkout -- afile
# รีเซ็ตไฟล์เป็นเนื้อหา HEAD ก่อนการแก้ไขใด ๆ ในเครื่อง
ในตอนท้ายของกระบวนการที่ค่อนข้างยุ่งยากคุณจะมีไฟล์เพียงไฟล์เดียวหรือหลายไฟล์
git stash --keep-index
จะเก็บดัชนี แต่จะหยุดทุกอย่าง - ทั้งในดัชนีและออก