A deploy
/
D---E---F---G master
แต่ผมอยากย้าย commit G ไปอยู่ใน branch deploy
ให้มีหน้าตาแบบนี้
G--A deploy
/
D---E---F master
หลังจากนั่งทดลองอยู่นาน ก็พบว่า คำตอบนั้นง่ายนิดเดียว
git checkout master
git reset --hard HEAD^
Javaเร็วส์, Javascript, Erlang, Python, Ruby, Clojure, Groovy, เลี้ยงลูก, วาดภาพ
A deploy
/
D---E---F---G master
G--A deploy
/
D---E---F master
git checkout master
git reset --hard HEAD^
6 comments:
คอมเมนต์อันก่อน มัน indent ไม่ได้อย่างใจ เลยลบทิ้ง เนื้อหาที่ต้องการเป็นตามข้างล่างนี้หนะครับ
เพราะว่าการ visualize tree มันดันเป็นแบบนี้ เลยแอบสร้างความเข้าใจผิดให้เราโดยไม่รู้ตัว
เช่น branch รูปนี้
A deploy
/
D---E---F---G---H master
ถ้ามันอยู่ในรูปนี้
A deploy
/
D---E---F---G
\
H master
จะทำให้พี่แก้ปัญหานี้ได้เร็วขึ้นมาก
คำถามให้น้อง TAP
จากรูปของ TAP ถ้าต้องการ move commit H จาก master ไป branch 'deploy' จะต้องสั่งอย่างไร
ตามที่เข้าใจก็คงต้อง merge อย่างเดียวครับ เพราะว่า commit H กับ branch deploy มันเป็นคนละเส้นกันแล้ว
แต่ที่วาดรูปนี้ให้ดู จะแสดงให้เห็นถึงเรื่องว่า จากเจ้าตัว visualize tree เนี้ย อาจจะทำให้ผู้ใช้บางท่าน ลืมไป ได้ว่า D E F G ก็ถือว่าเป็น commit ของสาย deploy เหมือนกัน
มีบางสถานะการณ์ที่เราไม่อยากทิ้ง H ไว้ที่ branch master
กรณีของผมก็คือ branch master ใช้การ pull จาก svn อย่างเดียว (one-way) ส่วน branch deploy ใช้เป็น custom configuration ของ site หนึ่งๆ
กรณีนี้เราแก้โดย
git checkout deploy
git rebase master
git checkout master
git reset --hard HEAD^
(สองขั้นสุดท้ายก็คือ ขั้นที่พี่อธิบายใน POST)
โอ้ น่าสนใจมาก ขอบคุณครับ ไม่เคยรู้เลยว่า rebase เอาไว้ทำอะไร
Post a Comment