ฉันต้องการที่จะปรากฏขึ้นและลบการตรึง "กลาง" ในสาขาหลักของฉัน ฉันจะทำสิ่งนี้ได้อย่างไร

ตัวอย่างเช่นในสาขาหลักต่อไปนี้ฉันต้องลบเฉพาะการส่งมอบ af5c7bf16e6f04321f966b4231371b21475bc4da ซึ่งเป็นครั้งที่สองเนื่องจากการรีบูตครั้งก่อนหน้า:

 commit 60b413512e616997c8b929012cf9ca56bf5c9113 Author: Luca G. Soave <luca.soave@gmail.com> Date: Tue Apr 12 23:50:15 2011 +0200 add generic config/initializers/omniauth.example.rb commit af5c7bf16e6f04321f966b4231371b21475bc4da Author: Luca G. Soave <luca.soave@gmail.com> Date: Fri Apr 22 00:15:50 2011 +0200 show github user info if logged commit e6523efada4d75084e81971c4dc2aec621d45530 Author: Luca G. Soave <luca.soave@gmail.com> Date: Fri Apr 22 17:20:48 2011 +0200 add multiple .container at blueprint layout commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22 Author: Luca G. Soave <luca.soave@gmail.com> Date: Thu Apr 21 19:55:57 2011 +0200 add %h1 Fantastic Logo + .right for 'Sign in with Github' 

ฉันต้องการ mantain

  • การแก้ไขครั้งแรกคือ 60b413512e616997c8b929012cf9ca56bf5c9113
  • ตัวยึดที่สาม e6523efada4d75084e81971c4dc2aec621d45530 และ
  • แก้ไขล่าสุด 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22

"ยกเลิก" เฉพาะการตรึงที่สอง af5c7bf16e6f04321f966b4231371b21475bc4da

ฉันจะทำสิ่งนี้ได้อย่างไร ขอบคุณล่วงหน้าลุค

48
22 апр. กำหนดโดย Luca G. Soave 22 เม.ย. 2011-04-22 18:48 '11 เวลา 18:48 2011-04-22 18:48
@ 3 คำตอบ

Rebase หรือ ย้อนกลับ เป็นพารามิเตอร์ Rebase จะลบการแก้ไขออกจากเรื่องราวเพื่อให้ดูเหมือนว่าไม่มีการแก้ไขที่สองอยู่ นี่จะเป็นปัญหาหากคุณย้ายสาขาหลักไปยังที่เก็บอื่น หากคุณพยายามคลิกหลังจากติดตั้งในกรณีนี้ git จะให้ข้อผิดพลาดพร้อมข้อผิดพลาดที่ไม่เกี่ยวข้องกับการกรอไปข้างหน้า

เปลี่ยนกลับเป็นโซลูชันที่ถูกต้องเมื่อสาขาถูกโอนไปยังที่เก็บอื่น git revert af5c7bf16 จะสร้าง fixative ใหม่ที่จะเปลี่ยนการเปลี่ยนแปลงที่ทำโดย af5c7bf16 ดังนั้นเรื่องราวจะไม่ถูกเขียนใหม่คุณเก็บบันทึกข้อผิดพลาดไว้อย่างชัดเจนและการเปลี่ยนตำแหน่งอื่น ๆ จะเกิดขึ้น

นี่เป็นวิธีที่ดีในการลบ: git rebase -i <commit>^ สิ่งนี้จะทำให้คุณยอมรับก่อนที่คุณจะลบ ตัวแก้ไขเชิงโต้ตอบจะแสดงรายการของการกระทำทั้งหมดกลับไปที่จุดนี้ คุณสามารถเลือกสควอชและอื่น ๆ ในกรณีนี้ให้ลบบรรทัดการส่งที่คุณต้องการลบและบันทึกไฟล์ การรีบูตจะทำให้งานเสร็จสมบูรณ์

63
22 апр. คำตอบนั้นได้รับจาก JCotton 22 เม.ย. 2011-04-22 19:23 '11 เวลา 19:23 2011-04-22 19:23

หากการรีบูตเป็นตัวเลือกคุณสามารถติดตั้งใหม่และก็ปฏิเสธมัน:

 $ git rebase -i 414ceffc^ 
border=0

หากการรีบูตไม่ใช่ตัวเลือกคุณสามารถส่งคืน:

 $ git revert af5c7bf16 
19
22 апр. คำตอบคือให้ mipadi 22 เม.ย. 2011-04-22 19:11 '11 เวลา 19:11 2011-04-22 19:11

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

  • สร้างสาขาใหม่จากหัวที่มีการกระทำทั้งหมดและสลับไปที่มัน
  • นำสาขาใหม่กลับไปยังจุดที่คุณต้องการเริ่มต้นฐานใหม่
  • จากนั้น (นี่คือประเด็นสำคัญ) เชอร์รี่เลือกข้อ ผูกพันต่อไปที่คุณต้องการใช้หลังจากนี้จากสาขาต้นทางไปยังสาขาใหม่และข้ามข้อผูกพันที่คุณไม่ต้องการอีกต่อไป (เช่นที่คุณลบ)
  • หากคุณต้องการให้เปลี่ยนชื่อสาขาเดิมเป็นรหัสเดิมและเปลี่ยนชื่อสาขาใหม่ที่เป็นสาขาเดิม
  • สุดท้ายให้คลิกการเปลี่ยนแปลงของคุณบน repo ระยะไกล (ถ้าใช้) คุณอาจต้องใช้ "push push" หากผู้ทำงานร่วมกันของคุณกำลังมีปัญหากับการแก้ไขอาจเป็นวิธีที่ง่ายที่สุดในการโคลน repo อีกครั้งจากแหล่งข้อมูลระยะไกล อย่างไรก็ตามคุณอาจต้องการพูดคุยกับพวกเขาหากคุณยังคงอาเจียนออกมาจากกลางเรื่องของคุณ!

ข้อมูลการหยิบเชอร์รี่: เชอร์รี่บิลด์ทำอะไรกับคอมไพล์?

นี่คือบางส่วนของพวกเขาที่ทำกับคอมไพล์ Tortoise (อย่างที่ฉันเพิ่งทำ) แน่นอนว่าการใช้ยูทิลิตี้ gui นั้นง่ายกว่าสำหรับการดำเนินงานประเภทนี้! Cherry picker ใช้ TortoiseGit

5
04 авг. คำตอบนั้นได้รับจาก BuvinJ 04 aug 2017-08-04 02:16 '17 เวลา 2:16 น. 2017-08-04 02:16

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