ฉันได้แยกพื้นที่เก็บข้อมูลจากนั้นฉันทำการเปลี่ยนแปลงบางอย่างและดูเหมือนว่าฉันทำทุกอย่างยุ่งเหยิง
ฉันต้องการเริ่มต้นใหม่ตั้งแต่ต้นโดยใช้ upstream / master ปัจจุบันเป็นฐานสำหรับการทำงานของฉัน
ฉันควรรีบูทพื้นที่เก็บข้อมูลของฉันหรือลบเลย?
ฉันได้แยกพื้นที่เก็บข้อมูลจากนั้นฉันทำการเปลี่ยนแปลงบางอย่างและดูเหมือนว่าฉันทำทุกอย่างยุ่งเหยิง
ฉันต้องการเริ่มต้นใหม่ตั้งแต่ต้นโดยใช้ upstream / master ปัจจุบันเป็นฐานสำหรับการทำงานของฉัน
ฉันควรรีบูทพื้นที่เก็บข้อมูลของฉันหรือลบเลย?
คำตอบ:
วิธีแก้ปัญหาที่ง่ายที่สุดคือ (ใช้ ' upstream' เป็นชื่อรีโมตที่อ้างอิงถึง repo ดั้งเดิมที่แยกกัน):
git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
(คล้ายกับหน้า GitHub นี้ส่วน "ฉันควรทำอย่างไรถ้าฉันอยู่ในสถานการณ์ที่ไม่ดี" )
โปรดระวังว่าคุณอาจสูญเสียการเปลี่ยนแปลงที่ทำกับmasterสาขา (ทั้งในเครื่องเนื่องจากในreset --hardและนอกด้านระยะไกลเนื่องจากpush --force )
ทางเลือกที่จะถ้าคุณต้องการที่จะรักษากระทำของคุณบนเพื่อเล่นกระทำเหล่านั้นอยู่ด้านบนของปัจจุบันmaster แทนที่ส่วนการตั้งค่าโดย
จากนั้นคุณยังจะต้องบังคับให้กด
ดูเพิ่มเติม " ฉันควรทำอย่างไรถ้าฉันอยู่ในสถานการณ์ที่ไม่ดี "upstream/mastergit rebase upstream/master
โซลูชันที่สมบูรณ์มากขึ้นการสำรองข้อมูลงานปัจจุบันของคุณ (ในกรณี) มีรายละเอียดใน " ล้างข้อมูลหลัก git หลักและย้ายการมอบหมายไปยังสาขาใหม่ "
ดูเพิ่มเติม " ดึงการอัปเดตใหม่จากที่เก็บ GitHub ดั้งเดิมลงในที่เก็บ GitHub ที่มีการแยก " เพื่อแสดงว่า " upstream" คืออะไร

หมายเหตุ: Repos GitHub ล่าสุดทำปกป้องmasterสาขาpush --forceกับ
ดังนั้นคุณจะต้องยกเลิกการป้องกันmasterครั้งแรก (ดูภาพด้านล่าง) และจากนั้นอีกครั้งหลังจากที่ปกป้องมันแรงผลักดัน )
หมายเหตุ: ใน GitHub โดยเฉพาะขณะนี้ (กุมภาพันธ์ 2019)ทางลัดในการลบ repos ที่มีการแยกสำหรับคำขอการดึงที่ได้รับการรวมเข้ากับอัปสตรีม
git reset --hard upstream/master
git resetคำตอบแล้ว
git remote" คำสั่งในstackoverflow.com/a/3903835/6309
คำตอบของความรัก VonC นี่เป็นเวอร์ชั่นง่าย ๆ สำหรับผู้เริ่มต้น
มีรีโมทเรียกคอมไพล์originซึ่งฉันแน่ใจว่าคุณทุกคนรู้ โดยทั่วไปคุณสามารถเพิ่มรีโมตจำนวนมากให้กับ repo git ได้ตามต้องการ ดังนั้นสิ่งที่เราทำได้คือแนะนำรีโมตใหม่ซึ่งเป็น repo ดั้งเดิมไม่ใช่ทางแยก ฉันชอบที่จะเรียกมันoriginal
ลองเพิ่ม repo ดั้งเดิมลงในส้อมของเราเป็นรีโมท
git remote add original https://git-repo/original/original.git
ตอนนี้เรามาเรียก repo ดั้งเดิมเพื่อให้แน่ใจว่าเรามีรหัสล่าสุด
git fetch original
ในฐานะที่เป็น VonC แนะนำให้ตรวจสอบให้แน่ใจว่าเราอยู่ในต้นแบบ
git checkout master
ตอนนี้เพื่อเพิ่มความเร็วให้กับโค้ดล่าสุดของ repo ดั้งเดิมสิ่งที่เราต้องทำคือรีเซ็ตฮาร์ดสาขาของเราตามรีโมตเดิม
git reset --hard original/master
และคุณทำเสร็จแล้ว :)
fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.สู่ขั้นตอนสุดท้าย คำแนะนำใด ๆ?
originalดีกว่าupstream(ซึ่งเอกสาร Github ใช้) เช่นเดียวกับorigin/master"อัปสตรีม" ของโลmasterคอล ลดความกำกวม ฉันสงสัยว่านี่คือเหตุผลที่คุณใช้งานหรือไม่
ทำตามคำตอบที่ยอดเยี่ยมของ @VonC นโยบาย บริษัท GitHub ของคุณอาจไม่อนุญาตให้ใช้ 'แรงผลักดัน' กับต้นแบบ
remote: error: GH003: Sorry, force-pushing to master is not allowed.
หากคุณได้รับข้อความแสดงข้อผิดพลาดเช่นนี้โปรดลองทำตามขั้นตอนต่อไปนี้
ในการรีเซ็ตส้อมอย่างมีประสิทธิภาพคุณต้องทำตามขั้นตอนเหล่านี้:
git checkout master
git reset --hard upstream/master
git checkout -b tmp_master
git push origin
เปิดส้อมของคุณบน GitHub ใน "การตั้งค่า -> สาขา -> สาขาเริ่มต้น" เลือก 'new_master' เป็นสาขาเริ่มต้นใหม่ ตอนนี้คุณสามารถบังคับให้กด 'สาขา' หลัก:
git checkout master
git push --force origin
จากนั้นคุณจะต้องตั้งค่า 'ต้นแบบ' เป็นสาขาเริ่มต้นในการตั้งค่า GitHub วิธีลบ 'tmp_master':
git push origin --delete tmp_master
git branch -D tmp_master
คำตอบอื่น ๆ คำเตือนเกี่ยวกับการสูญเสียการเปลี่ยนแปลงของคุณยังคงใช้ระวังตัว
(ไม่ใช่ทุกคนที่ชอบทำสิ่งต่าง ๆ ผ่านส่วนต่อประสานบรรทัดคำสั่ง git)
เมื่อตั้งค่านี้แล้วคุณจะต้องทำตามขั้นตอนที่ 7-13 เท่านั้น
Fetch> checkout master branch> รีเซ็ตเป็น master ของพวกเขา> พุชการเปลี่ยนแปลงไปยังเซิร์ฟเวอร์
คลิกสองครั้งที่สาขา "ต้นแบบ" ของคุณเพื่อตรวจสอบว่ายังไม่ได้ชำระเงิน
ค้นหาการกระทำที่คุณต้องการรีเซ็ตหากคุณเรียกว่า repo "master" คุณจะต้องการค้นหาการกระทำด้วยแท็ก "master / master"
คลิกขวาที่การกระทำ> "รีเซ็ตสาขาปัจจุบันเป็นการกระทำนี้"
ในกล่องโต้ตอบให้ตั้งค่าฟิลด์ "การใช้โหมด:" เป็น "ยกเลิกการเปลี่ยนแปลงการคัดลอกการทำงานทั้งหมด" จากนั้นกด "ตกลง" (ตรวจสอบให้แน่ใจว่าได้ใส่การเปลี่ยนแปลงใด ๆ ที่คุณไม่ต้องการเสียลงในสาขาแยกต่างหากก่อน)
คุณเสร็จแล้ว!