ทำการเปลี่ยนแปลงทั้งหมดของฉันในสาขาปัจจุบันและย้ายไปยังสาขาใหม่ใน Git


105

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

ตอนนี้สิ่งที่ฉันอยากทำคือ:

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

ฉันจะทำเช่นนี้ได้อย่างไร?

คำตอบ:


103

หากคุณยังไม่ได้ทำอะไรแสดงว่าคุณอยู่ในตำแหน่งที่ถูกต้องแล้ว

  1. สร้างสาขาใหม่: git checkout -b edge
  2. ไฟล์ของคุณไม่มีการเปลี่ยนแปลง เพียงแค่git addสิ่งที่จำเป็นและกระทำตามปกติ
  3. เมื่อเสร็จสิ้นการกระทำเกี่ยวกับการedgeสลับกลับไปmasterด้วยและgit checkoutgit merge edge

ยังไม่ได้ทำอะไรเลยดังนั้นบรรทัดแรกจึงเป็นภาพที่น่ายินดี ... แต่จริงๆแล้วมันค่อนข้างไม่เจ็บปวด :-)
Drenai

87

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

git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply

Stash wrapper ไม่จำเป็นอย่างยิ่ง แต่สำหรับการเปลี่ยนแปลงการทำงานที่ไม่ได้ผูกมัดใช่ไหม
HaveAGuess

4
@HaveAGuess ขวา โดย "ใช้การเปลี่ยนแปลงทั้งหมดของฉัน" ฉันได้รวมการเปลี่ยนแปลงที่ยังไม่ได้เพิ่มในปัจจุบันไว้ด้วย ดังนั้นการซ่อน
VonC

ไม่สามารถยุบบรรทัดที่สองและสามเป็น "git checkout -b edge master" ได้หรือไม่
Paul Lynch

@PaulLynch พิจารณากระทำเหล่านั้น (บนmaster) ที่ควรจะอยู่ในedge ที่มีในmasterใช่ ฉันได้แก้ไขคำตอบแล้ว
VonC

ฉันไม่เห็นว่าgit stashที่นี่มีประโยชน์อย่างไรเนื่องจากการใช้git checkout -bไม่ได้แก้ไขโครงสร้างการทำงานเลย ...
user1686

13

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

git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.