สมมติว่าเรามีสถานการณ์ต่อไปนี้ใน Git:
พื้นที่เก็บข้อมูลที่สร้างขึ้น:
mkdir GitTest2 cd GitTest2 git init
การดัดแปลงบางอย่างในต้นแบบเกิดขึ้นและได้รับการยอมรับ:
echo "On Master" > file git commit -a -m "Initial commit"
Feature1 แยกออกจากงานหลักและงานบางอย่างเสร็จแล้ว:
git branch feature1 git checkout feature1 echo "Feature1" > featureFile git commit -a -m "Commit for feature1"
ในขณะเดียวกันจะพบข้อบกพร่องในรหัสหลักและมีการสร้างสาขาโปรแกรมแก้ไขด่วน:
git checkout master git branch hotfix1 git checkout hotfix1
ข้อผิดพลาดได้รับการแก้ไขในสาขาโปรแกรมแก้ไขด่วนและรวมกลับไปยังต้นแบบ (อาจหลังจากการตรวจสอบคำขอดึง / รหัส):
echo "Bugfix" > bugfixFile git commit -a -m "Bugfix Commit" git checkout master git merge --no-ff hotfix1
การพัฒนาบน feature1 ดำเนินต่อไป:
git checkout feature1
ว่าฉันต้องการโปรแกรมแก้ไขด่วนในสาขาคุณลักษณะของฉันอาจเป็นเพราะข้อผิดพลาดเกิดขึ้นที่นั่น ฉันจะทำสิ่งนี้ให้สำเร็จโดยไม่ทำสิ่งที่ผูกไว้ในฟีเจอร์ของฉันได้อย่างไร?
ฉันต้องการป้องกันไม่ให้มีการคอมมิตใหม่สองรายการในสาขาฟีเจอร์ของฉันซึ่งไม่เกี่ยวข้องกับการใช้งานฟีเจอร์ นี่เป็นเรื่องสำคัญสำหรับฉันหากฉันใช้คำขอการดึง: การกระทำทั้งหมดนี้จะรวมอยู่ในคำขอการดึงและต้องได้รับการตรวจสอบแม้ว่าจะได้ทำไปแล้ว (เนื่องจากโปรแกรมแก้ไขด่วนมีอยู่แล้วในต้นแบบ)
ฉันไม่สามารถทำgit merge master --ff-only
: "ร้ายแรง: เป็นไปไม่ได้ที่จะกรอไปข้างหน้าอย่างรวดเร็ว" แต่ฉันไม่แน่ใจว่าสิ่งนี้จะช่วยฉันได้หรือไม่
git rebase
ดูเหมือนว่าจะเป็นเวทย์มนตร์ดำสำหรับฉัน ....
git branch feature1
และgit checkout feature1
สามารถรวมกันเป็นgit checkout -b feature1
และ 4 สามารถลดลงอย่างสิ้นเชิงเพื่อgit checkout -b hotfix1 master
feature1
git rebase