Git rebase สำหรับสาขาที่สร้างขึ้นเมื่อหลายวันก่อน

ฉันต้องการความช่วยเหลือในการทำความเข้าใจ git rebase สำหรับสถานการณ์นี้ ฉันตรวจสอบสาขาที่สร้างโดยใครบางคนเมื่อ 10 วันก่อน ฉันเช็คเอาท์โดยใช้

git checkout -b <some name> origin/branchname

(ฉันแค่ใช้ชื่ออื่นเพื่อระบุ)

หลังจากชำระเงินแล้ว หากฉันทำการรีบูตโดยอยู่ในสาขาที่เช็คเอาท์นี้

git rebase origin/master

มันแสดงข้อผิดพลาดบางอย่างเช่น 1) ช่องว่างต่อท้าย - ฉันอ่านเกี่ยวกับเรื่องนี้ แต่แม้หลังจากลองใช้คำสั่งนี้ที่ฉันพบทางออนไลน์ ฉันยังคงเห็นคำเตือน

 git config core.whitespace nowarn

2) ความขัดแย้งในการรวมอัตโนมัติ (เพิ่ม/เพิ่ม): รวมข้อขัดแย้งใน... ไฟล์เหล่านี้อยู่ในสาขาหลัก แต่เนื้อหาได้รับการแก้ไขเล็กน้อยในสาขาชำระเงิน แล้วฉันจะแก้ไขสิ่งนี้ได้อย่างไร? ฉันไม่มีอำนาจในการเปลี่ยนแปลงสิ่งใดใน master โดยตรงหากนั่นเป็นวิธีแก้ไข ไฟล์เหล่านี้ควรมีเนื้อหาจากสาขาการชำระเงินนี้เพื่อให้การทดสอบทำงานได้ดีเนื่องจากเกี่ยวข้องกับเรื่องนั้น.. โปรดชี้แจงให้ฉันด้วย..

ความนับถือ


person geej    schedule 12.07.2011    source แหล่งที่มา
comment
สำหรับปัญหาแรกของฉัน ฉันเจอ stackoverflow .com/questions/2327917/ แต่ใครก็ได้ช่วยอธิบายคำสั่งที่ฉันควรใช้เพราะฉันไม่เข้าใจจากคำตอบที่ให้มา.. ขอบคุณ   -  person geej    schedule 12.07.2011


คำตอบ (3)


พวกผู้ชายตอบคำถามเกี่ยวกับช่องว่างค่อนข้างมาก แต่ไม่ได้แตะส่วนการรีบูตของคำถาม นี่คือสิ่งที่เกิดขึ้นเมื่อคุณรีบูต:

ก่อนอื่นให้คุณไปชำระเงินที่สาขาใดสาขาหนึ่ง จากนั้นคุณพูดว่า:

git rebase master

ซึ่งหมายความว่าคุณต้องการรีบูต HEAD ปัจจุบัน (สาขาหัวข้อของคุณ) ไปยังต้นแบบ Git จะย้อนกลับไปในประวัติศาสตร์ของ Topic Branch ของคุณและในประวัติของ Master Branch และค้นหา Commit ที่เป็นบรรพบุรุษร่วมคนแรกของทั้งสอง การคอมมิตนี้จะเป็นฐานเก่าสำหรับสาขาหัวข้อของคุณ จากนั้นจะนำการคอมมิตทั้งหมดที่เกิดขึ้นตั้งแต่นั้นมาในสาขาของคุณและ "นำไปใช้ใหม่" ตามลำดับที่ปรากฏบนต้นแบบปัจจุบัน บางครั้งข้อขัดแย้งสามารถเกิดขึ้นได้ จากนั้นกระบวนการรีบูตจะหยุดและรอการแก้ไขจากคุณ ดังนั้น คุณต้องแก้ไขด้วยตนเองโดยการแก้ไขไฟล์ จากนั้นทำเครื่องหมายว่าแก้ไขแล้วโดย git add conflicted_file เมื่อดำเนินการเสร็จแล้ว คุณจะต้องพูดว่า git rebase --continue

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

หวังว่าจะช่วยได้

person Eugene Sajine    schedule 12.07.2011
comment
ใช่ มันช่วยได้ ดังนั้นการเปลี่ยนแปลงที่ฉันทำในสาขาหัวข้อจึงเหมือนกับการเปลี่ยนแปลงในหัวข้อหลักใช่ไหม ดูเหมือนว่าสิ่งนี้สามารถทำได้ก็ต่อเมื่อเรามั่นใจว่าการเปลี่ยนแปลงในสาขาหัวข้อนั้นไม่จำเป็น... ไม่อย่างนั้นทำไมมีคนแก้ไขมันให้ตรงกับเนื้อหาเดียวกันกับต้นฉบับ - person geej; 12.07.2011
comment
ไม่ ไม่จริงๆ การเปลี่ยนแปลงที่บันทึกไว้ในสาขาหัวข้อจะไม่ส่งผลกระทบต่อสาขาหลักเลย ในระหว่างหลักการดำเนินการ rebase จะกลายเป็นฐานใหม่สำหรับสาขาหัวข้อของคุณที่คอมมิต แต่ตัวชี้หลักไม่ย้าย หากคุณต้องการเลื่อนระดับผลลัพธ์ของการรีเบสไปที่สาขาหลักของคุณ คุณจะต้องชำระเงินไปที่สาขาหลักและทำหัวข้อการรวมคอมไพล์ ซึ่งจะส่งผลให้มีการผสานไปข้างหน้าอย่างรวดเร็ว และตัวชี้หลักจะถูกย้ายไปยังการคอมมิตแบบเดียวกับที่สาขาหัวข้อของคุณทำ - person Eugene Sajine; 14.07.2011
comment
คุณสามารถสร้าง repo ทดสอบและเล่นกับสองสาขาได้โดยกระทำบางสิ่งที่แตกต่างกัน จากนั้นลองรีบูตซึ่งกันและกัน ก่อนที่คุณจะทำสิ่งนั้นให้รัน gitk --all &. ที่จะเปิดใช้งาน GUI สำหรับเบราว์เซอร์ประวัติ หลังจากดำเนินการแต่ละครั้งที่คุณทำ ให้กด F5 เพื่ออัปเดต GUI นั่นควรแสดงให้คุณเห็นว่ากระบวนการทำงานอย่างไรและผลลัพธ์คืออะไร - person Eugene Sajine; 14.07.2011

หากนี่เป็นคำถาม "git svn windows linux whitespace problems" ที่คุณ กล่าวถึงแล้วคำสั่งจะเป็น:

git config core.whitespace nowarn
git config core.autocrlf true

(เพื่อคงสถานที่การตั้งค่าเหล่านั้นไว้เป็น repo ปัจจุบัน)
นั่นจะบังคับให้ไฟล์ทั้งหมดใช้รูปแบบ eol หนึ่งรูปแบบ เพื่อป้องกันไม่ให้ไฟล์บน origin/master มีบรรทัดที่เหมือนกันกับ eol อื่นที่สำเนาของคุณคุณกำลังรีบูต (ซึ่ง จะอธิบายข้อความแสดงข้อผิดพลาด CONFLICTS (add/add))

แต่ฉันยังคงสงสัยเกี่ยวกับ autocrlf true และชอบ จัดการสไตล์ eol ผ่าน .gitattributes ไฟล์< /ก>.

person VonC    schedule 12.07.2011

cd ลงในโฟลเดอร์ .git ใน repo ของคุณ คุณอาจไม่เห็นโฟลเดอร์นี้หากคุณใช้ File Explorer ที่ไม่ได้เปิดใช้งานเพื่อแสดงไฟล์ที่ซ่อนอยู่หรือไฟล์ที่มี . หรือ _ อยู่ด้านหน้า ภายในโฟลเดอร์ .git คุณจะมีไฟล์ชื่อ config เปิดมันขึ้นมาในโปรแกรมแก้ไขข้อความและคุณควรจะเห็นส่วนที่ชื่อ [core] เพิ่ม whitespace = nowarn ลงไป ตำแหน่งอื่นที่คุณสามารถค้นหา .gitconfig อยู่ภายใต้ไดเร็กทอรี home ของคุณ หากคุณใช้เครื่อง Linux หากอยู่บน windows ขึ้นอยู่กับว่าคุณติดตั้ง git อย่างไร (ผ่าน cygwin หรือ msysgit)

หาก msysgit เห็นคำถามนี้ (ที่ git config --global ถูกเขียนไปที่ไหน ?) สำหรับตำแหน่งของไฟล์ .gitconfig หากเป็น cygwin คุณจะเห็นเนื้อหาภายใน cat ~/.gitconfig

person yasouser    schedule 12.07.2011