ยังไงฉัน painlessly ผนวกรวม divergent วามสามารถของคุณสมบัติหน่วย?

0

คำถาม

ฉันต้องการเปิดการประชาสัมพันธ์ในแบรนซ์ชื่อ feature-b นั่นไม่นานจะเป็นผนวกรวมแล้วต้อง main. อย่างไรก็ตามฉันเขียนมันเพื่อสนับสนุนของฉัน feature-a แบรนซ์ซึ่งมีต่อเนื่อง ฉันต้องการจะทำต่อไปหรือไม่ทำงาน feature-a และข้อต่อรองที่ทำงานฉันทำอยู่ feature-b ก่อนที่มันจะถูกรวมเข้าด้วไป main.

อะไรคือหนทางที่ดีที่สุดที่ฉันทำอย่างนี้เหรอ? เรา merges ต้อง main เป็น squashed ดังนั้นทุก commits บ feature-b จะ rewritten เป็นเดี่ยวก่อตอนที่มันจะถูกรวม main. ดังนั้น rebasing feature-afeature-b ตอนนี้จะมีในอนาคตความขัดแย้งเจ็บปวดตอนที่ฉัผนวกรวม feature-a ต้อง main เพราะเหมือนกัเปลี่ยนแปลงจะถูกทำในในต่างออก commits.

อะไรคือวิธีที่ดีที่สุดสำหรับฉันที่จะรวมถึงการเปลี่ยนแปลงทำอยู่ feature-b ในของฉัน feature-a ระหว่างที่แบรนซ์ minimizing ความเจ็บปวดตอนที่ผมในที่สุดผนวกรวม feature-a ต้อง main?

ปรับปรุง

ฉันไปต่อแล้ว:

  1. Rebased feature-afeature-b
  2. ทำให้มากกเปลี่ยนแปลง(เฉพาะ 1 ก่อไป feature-a แต่มันไม่มีอย่างไรก็ตามผม feature-b ถูกตรวจส
  3. สควอช์-ผนวกรวมแล้ว feature-b ครั้งนึงมันเป็นรับการรับรอง(ไม่มีการเปลี่ยนแปลต้องการดังนั้น feature-a แล้วมีส่วนผสมที่แน่นอนรหัสที่ถูกรวม)
  4. ดึงล่าสุด main และ rebased feature-a อยู่บนสุดของมัน

ที่กลัว,git กจะบ่นว่าทุกๆเรื่องหลายแฟ้มเป็น"ทั้งสองแก้ไข"หรือ"ทั้งสองเพิ่มแล้ว". คนเดียวออกจะน่ารำคาญแต่งง่ายที่จะจัดการกับมัน อะไรที่ทำให้มันเหลือเชื่อสับสน-โดยเฉพาะอย่างยิ่งถ้าผ่านช่วงเวลาผ่านไปผมอยู่และนั่นคือสิ่งที่ผนวกรวมความคิดเห็นในแฟ้มนั่นนะ

ถึงแม้ว่าทั้งสอง main แล้ว feature-a หน่วยมีคน เดียวกันกับรหัส อยู่ในแฟ้มทั้งหมด,ฉันเข้าใจโคตรน่ารำคาญพฤติกรรม:

  1. สำหรับคำว่า"ทั้งสองถูกเพิ่ม"แฟ้ม,ผนวกรวมความคิดเห็นเป็นการเพิ่มสำหรับ"หัว(ปัจจุบันเปลี่ยน)"และ"พ่อแม่ของ#ค่อยจัดการเรื่อง(ก่อกข้อความ)". ฉันบังคับให้เลือกหนึ่งหรือคนอื่นแม้ว่าพวกเขาเป็นเหมือนกัน!
  2. สำหรับคำว่า"ทั้งสองแก้ไข"แฟ้ม,มันคือยิ่งแย่ใหญ่ช่วยข้าด้วย คำว่า"หัว(ปัจจุบันเปลี่ยน)"แสดงที่ถูกต้องเป็นรหัสมอส อย่างไรก็ตามที่"พ่อแม่ของ#ค่อยจัดการเรื่อง(ก่อกข้อความ)"ส่วนแสดงถึงครึ่งหนึ่งของรหัสมอส อีกครั้ง ถึงแม้ว่าทั้งสองหน่วยมีทั้งหมดรหัส!! ฉันเด็กคุณไม่ยอมรับคน"ที่เข้ามาเปลี่ยน"(ในฐา labelled ยกับรหัส)จะถูกลบออกรหัสนั่นมันอยู่ในทั้งสองหน่วย!

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

ปรับปรุง 2

โอเคฉันเห็นว่าทำไมมันจะต้องถอดรหัสแล้ว มันเป็นเพราะว่าการเปลี่ยนแปลงฉันทำอยู่ feature-b อยู่ในหลาย commits และพวกนั้น commits กลายเป็ squashed ตอนที่ผนวกรวมเพื่ main งคับพวกเขาอย่างรวดเร็ว นี่คือไม่ต้องสงสัยที่แหล่งข่าวของความเจ็บปวดและเหตุผลว่าทำไมฉันพยายามที่จะคิดให้ออกเป็น saner workflow.

git
2021-11-23 23:26:24
1

คำตอบที่ดีที่สุด

0

ฉันไม่เชื่อว่าสุดท้ายผนวกรวม/สควอช์จะถูกเรื่องยุ่งยาก ถ้าคนเดียวกับการเปลี่ยนแปลงเป็นสิ่งที่ทำให้อยู่ในต่างออก commits บางที Git สามารถตรวจจับและมีความสุขกับมัน

ถ้าคุณคิดว่ามันจะเป็นยุ่งเหยิงแม้ว่าสิ่งที่คุณจะทำอย่างคือ:

  1. Rebase ของคุณ feature-a แบรนซ์กับ feature-b ตอนนี้ดังนั้นของคุณ feature-a แบรนซ์ตอนนี้รวมถึงการที่เสร็จสมบูรณ์วามสามารถของคุณสมบัตินบีและอยู่ในความคืบหน้าวามสามารถของคุณสมบัตินนั่นคือสิ่งที่คุณต้องทำงานของคุณ.
  2. หลังจาก feature-b จะถูกรวมเข้าที่ main จากหน่วยสันติบาล rebase feature-a ไปที่ทำทันที ก่อน ที่ squashed ก่อนที่พวกเขาทำสำหรับคุณสมบัตินบีควรจะดำเนินไปอย่างราบรื่น
  3. ของคุณ feature-a แบรนซ์ใช้ git reset --soft X อยู่ไหน X คือก่ค่อยจัดการเรื่องสำหรับ squashed ก่อนพวกเขาทำสำหรับคุณสมบัติบีใช้ git commit เพื่อให้เป็นคนทำเอง ตอนนี้คุณมี squashed ก่อนที่เนื้อหาของคือจะเท่ากับปัจจุบันของรัฐของงานของคุณอยู่วามสามารถของคุณสมบัติ A แต่เรื่องนี้ก่อนพ่อแม่เป็นคนก่อนที่เพิ่มความสามารถบุกไปที่หลักจากหน่วยสันติบาลงั้นนี่ก่อนของข้อแตกต่างกับว่าพ่อแม่จะ เดียวที่ มีคุณสมบัติ A มันไม่เป็นไรจะทำต่อไปหรือไม่ทำงานกับความสามารถของคุณสมบัติตอนนี้หรือแค่การร้องขอคผนวกรวม.

โดยวิธีการที่ผมค่อนข้างมั่นใจว่ามันจะไม่จำเป็นต้องเป็นเรื่องยุ่งยากถ้าองค์กรของคุณเคย merges แทนที่จะเป็น rebases เพื่อเพิ่งอย่างที่ต้องหลักของแบรนซ์. แล้วมันจะเป็นผลประโยชน์ของการปกป้องประวัติการใช้ที่ใช้อยู่ของรหัสคุณกำลังทำงานอยู่แทนที่จะเป็นแค่การปกป้องนี้ตามธรรมชาประวัติศาสตร์

2021-11-23 23:52:54

ทำความเข้าใจกันหน่อยนะว่าเราไม่ต้องใช้ rebases-เราใช้ squashed commits. และฉัน 99%มั่นใจว่าเรื่อง จะ จะยุ่งยากอย่างที่ฉันพยายามนี้ในอดีตที่ผ่านมา Git ได้อย่างสยดสยองด้หารค่า commits ทำคนเดียวกับการเปลี่ยนแปลง ผมก็ยินดีจะลองทำมันอีกครั้งถึงแม้ว่าแล้วกลับมารายงาน:)
me--

@ฉัน--ฉันค่อนข้างแน่ใจว่า squashed commits เป็น rebase
evolutionxbox

Rebasing หมายถึงเคลื่อนที่แบรนซ์งั้นมันเริ่มต้นต่างออกประเด็นซึ่งเขียนบทใหม่หน่อประวัติศาสตร์ของมันถูกพัฒนา. Squashing หมายถึงการเปลี่ยนทุกแบรนซ์ไปแค่หนึ่งคนก่อ,discarding ประวัติศาสตร์ของมันถูกพัฒนายกเว้นคนสุดท้ายผลลัพธ์.
David Grayson

@DavidGrayson ได้โปรดเห็นของปรับปรุงคำถามสำหรับคำอธิบายของพฤติกรรมฉันเห็นจาก git.
me--

โอเค. ของขั้นที่ 4("ดึงล่าสุดหลักและ rebased วามสามารถของคุณสมบัติ-เป็นอยู่บนสุดของมัน")คือสิ่งที่ทำให้เกิดคุณทั้งความเจ็บปวดดังนั้นมันไม่ใช่เรื่องที่ฉันจะขอแนะนำให้ทำอะไรอยู่ แทนที่จะทำอย่างนั้นขั้นที่ 4 อยู่ในคำถามของคุณพยายามขั้นตอน 2 และ 3 จากคำตอบของฉันแล้ว
David Grayson

ขอบคุณ@DavidGrayson. มันดูเหมือนอย่างนั้น . . laborious
me--

อย่างที่ฉันบอกในคำตอบของฉัน,ปัญหาคือสาเหตุมาจากคนที่ทำเรื่องทั้งหมดนี้อ่านแล้ว squashing นมากกว่าแทนที่จะมาคอย merging.
David Grayson

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่