Git invert พื้นที่

ฉันมีการเปลี่ยนแปลงในพื้นที่จัดเตรียมขณะที่คนอื่นยังไม่ได้ส่งมอบ (บางไฟล์มีการเปลี่ยนแปลงทั้งภายในและภายนอกพื้นที่จัดเตรียม) ฉันต้องการกลับเนื้อหาของพื้นที่ตรงกลางและการเปลี่ยนแปลงที่ไม่ได้จัดส่ง มีทางลัดในการทำเช่นนี้หรือ ไม่โดยไม่ต้องดำเนินการใด ๆ ที่ซับซ้อนเช่นสาขาในพื้นที่หรือความแตกต่างหรือหยุด [ฯลฯ ] หรือไม่ ขอขอบคุณ

9
31 янв. วันที่ 31 ม.ค. 2013-01-31 18:05 '13 เวลา 18:05 2013-01-31 18:05
@ 4 คำตอบ

นี่คือวิธีที่ฉันทำ:

  • กำหนดดัชนีการแก้ไขชั่วคราว
  • ทำการแก้ไขส่วนที่เหลือที่เหลือให้เสร็จสมบูรณ์
  • สลับลำดับของการคอมมิตด้วยการเรียงสับเปลี่ยนแบบโต้ตอบ
  • รีเซ็ตแบบผสม
  • ซอฟต์รีเซ็ต

สามารถพิมพ์ด้วยตนเองได้ค่อนข้างเร็วโดยเฉพาะหากคุณใช้ข้อความ Vim สำหรับส่งข้อมูล:

4
25 марта '13 в 15:16 2013-03-25 15:16 คำตอบจะได้รับ gtd 25 มีนาคม 13 ที่ 15:16 2013-03-25 15:16

จากการตอบสนองของ gtd และความสามารถในการสลับสคริปต์ที่คอมมิตนี่คือสิ่งที่ฉันใช้อยู่ตอนนี้:

 [alias] swaplast = !git tag _invert  git reset --hard HEAD~2  git cherry-pick _invert _invert~1  git tag -d _invert invertindex = !git commit -m tmp1  git add -A  git commit -m tmp2  git swaplast  git reset HEAD~1  git reset HEAD~1 --soft 
border=0

เขียนบล็อกของฉันที่นี่: http://blog.ericwoodruff.me/2013/12/inverting-git-index.html

3
08 дек. คำตอบนั้นได้รับจาก Eric Woodruff 08 ธันวาคม 2013-12-08 22:43 '13 เวลา 22:43 น. 2013-12-08 22:43

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

  • สร้างแพทช์สำหรับวัสดุที่อยู่ในไดเรกทอรีการทำงานของคุณ แต่ไม่อยู่ในดัชนีของคุณ (สิ่งที่คุณ git add ด้วย)

     git diff-index --cached -p HEAD > /tmp/staged.patch 
  • รีเซ็ตดัชนีและไดเรกทอรีทำงานของคุณเป็น HEAD

     git apply --index /tmp/unstaged.patch 
  • ใช้แพทช์แบ่งเป็นระยะของคุณกับไดเรกทอรีการทำงานของคุณเท่านั้น

    3
31 янв. คำตอบนั้นได้รับ twalberg 31 มกราคม 2013-01-31 19:13 '13 เวลา 19:13 2013-01-31 19:13

นี่คือสิ่งที่ฉันใช้ในการแก้ปัญหานี้

ขั้นแรกให้ git reset ซึ่งจะลบไฟล์ทั้งหมดจาก "staging" เป็น "ไฟล์ที่ไม่ได้ตั้งค่าสำหรับการแก้ไข" ไฟล์ที่อยู่ในทั้ง "staging" และไฟล์ที่ไม่ได้ตั้งค่าสำหรับการแก้ไขจะมีการเปลี่ยนแปลงล่าสุดของคุณที่อยู่ใน "ไฟล์ที่ไม่ได้ตั้งค่าเพื่อแก้ไข" ในปัจจุบันของคุณ

แล้วก็

git add /path/to/file เฉพาะไฟล์ที่จำเป็นต้องเพิ่มลงในคิว

ไม่สั้นอย่างแน่นอน แต่เขาทำงาน

ถัดไปหลังจาก git reset คุณสามารถ git checkout /path/to/file สำหรับไฟล์ที่ "ไม่ได้ตั้งค่าการยอมรับ" ที่คุณไม่ต้องการเพิ่มในสเตจ การดำเนินการนี้จะลบไฟล์บางไฟล์ออกจาก "not set for commit"

จากนั้นรัน git add . ซึ่งจะเพิ่มไฟล์ทั้งหมดใน "ไม่ได้ตั้งค่าสำหรับการกระทำ" ใน "เวที" - ขึ้นอยู่กับสิ่งที่ง่ายสำหรับสถานการณ์ของคุณ

0
31 янв. ตอบโดย Alex Naspo เมื่อวันที่ 31 มกราคม 2013-01-31 18:13 '13 เวลา 18:13 2013-01-31 18:13

คำถามอื่น ๆ เกี่ยวกับ tags หรือ ถามคำถาม