ฉันเพิ่งเริ่มใช้ Git ดังนั้นอย่าลังเลที่จะปฏิบัติต่อฉันเหมือนมือใหม่
ขั้นตอนการทำงานของเราเป็นเช่นนั้น เรามีสาขาที่เรียกว่าที่ฉันสามารถเข้าถึงที่dev origin/devเมื่อเราทำการเปลี่ยนแปลงเราจะสร้าง branch จาก dev:
git checkout -b FixForBug origin / dev
ตอนนี้ผมได้เรียกว่าเป็นสาขาFixForBugที่ติดตามไป origin/dev(ผมคิดว่าเป็นคำที่เหมาะสม) ดังนั้นถ้าฉันทำgit pullมันจะทำให้เกิดการเปลี่ยนแปลงใหม่origin/devซึ่งดีมาก ตอนนี้เมื่อฉันแก้ไขเสร็จแล้วฉันก็กดไปที่สาขาระยะไกลที่เรียกว่าสิ่งเดียวกัน
ก่อนอื่นฉันดึงการเปลี่ยนแปลงใด ๆ จากorigin/devและทำการ rebase:
git ดึง --rebase
จากนั้นฉันจะผลักดันการเปลี่ยนแปลงไปยังสาขาระยะไกลที่มีชื่อเดียวกัน:
git push origin FixForBug
ตอนนี้มีสาขาบนเซิร์ฟเวอร์ระยะไกลและฉันสามารถสร้างคำขอดึงเพื่อให้การเปลี่ยนแปลงนั้นได้รับการอนุมัติและรวมกลับไปที่สาขา dev ฉันไม่เคยผลักดันอะไรให้กับorigin/devตัวเอง ฉันเดาว่านี่เป็นขั้นตอนการทำงานทั่วไป
ครั้งแรกที่ฉันทำgit pushมันใช้งานได้ดีและสร้างสาขาระยะไกล อย่างไรก็ตามหากฉันกดครั้งที่สอง (สมมติว่าในระหว่างการตรวจสอบโค้ดมีคนชี้ให้เห็นปัญหา) ฉันได้รับข้อผิดพลาดต่อไปนี้:
ข้อผิดพลาด: ล้มเหลวในการส่งการอ้างอิงบางส่วนไปที่คำใบ้ ' https://github.limeade.info/Limeade/product.git ': การอัปเดตถูกปฏิเสธเนื่องจากส่วนปลายของสาขาปัจจุบันของคุณอยู่หลังคำใบ้: คู่ระยะไกล รวมการเปลี่ยนแปลงระยะไกล (เช่น hint: 'git pull ... ') ก่อนที่จะกดอีกครั้ง คำแนะนำ: ดู 'หมายเหตุเกี่ยวกับกรอไปข้างหน้า' ใน 'git push --help' สำหรับรายละเอียด
อย่างไรก็ตามถ้าฉันทำgit statusมันบอกว่าฉันนำหน้าorigin/dev1 คอมมิต (ซึ่งก็สมเหตุสมผลดี) และถ้าฉันทำตามคำใบ้และเรียกใช้git pullมันก็บอกว่าทุกอย่างเป็นปัจจุบัน ฉันคิดว่านี่เป็นเพราะฉันกำลังผลักดันไปยังสาขาอื่นที่ไม่ใช่สาขาต้นน้ำของฉัน ฉันสามารถแก้ไขปัญหานี้ได้โดยเรียกใช้:
git push -f origin FixForBug
ในกรณีนี้ระบบจะผลักดันการเปลี่ยนแปลงไปยังสาขาระยะไกลโดยพูดว่า(การอัปเดตแบบบังคับ)และทุกอย่างดูเหมือนจะดีในสาขาระยะไกล
คำถามของฉัน:
เหตุใดจึง-fจำเป็นต้องมีในสถานการณ์นี้ โดยปกติเมื่อคุณบังคับบางอย่างนั่นเป็นเพราะคุณทำอะไรผิดพลาดหรืออย่างน้อยก็ขัดต่อการปฏิบัติตามมาตรฐาน ฉันสามารถทำสิ่งนี้ได้หรือไม่หรือจะทำให้บางสิ่งในสาขาระยะไกลยุ่งหรือสร้างความยุ่งยากให้ใครก็ตามที่ต้องรวมเนื้อหาของฉันเป็น dev ในที่สุด?
git pull origin FixForBugก่อนที่ฉันจะผลักไปที่? โอเคที่สมเหตุสมผล อย่าลังเลที่จะเพิ่มเป็นคำตอบ!
