การผสาน Git ทำให้เราสามารถดำเนินการไปข้างหน้าอย่างรวดเร็วและไม่มีการรวมสาขาไปข้างหน้าอย่างรวดเร็ว แนวคิดใดบ้างที่จะใช้การกรอไปข้างหน้าอย่างรวดเร็วและเมื่อใดที่จะไม่ใช้การกรอไปข้างหน้าอย่างรวดเร็ว
การผสาน Git ทำให้เราสามารถดำเนินการไปข้างหน้าอย่างรวดเร็วและไม่มีการรวมสาขาไปข้างหน้าอย่างรวดเร็ว แนวคิดใดบ้างที่จะใช้การกรอไปข้างหน้าอย่างรวดเร็วและเมื่อใดที่จะไม่ใช้การกรอไปข้างหน้าอย่างรวดเร็ว
คำตอบ:
--no-ffตัวเลือกที่มีประโยชน์เมื่อคุณต้องการที่จะมีความคิดที่ชัดเจนของสาขาคุณลักษณะของคุณ ดังนั้นแม้ว่าในระหว่างนี้ยังไม่มีการทำคำสั่ง FF ก็เป็นไปได้ - บางครั้งคุณยังต้องการให้แต่ละการกระทำในการฉีดตรงกับคุณลักษณะหนึ่ง ดังนั้นคุณจึงถือว่าสาขาฟีเจอร์ที่มีการคอมมิชชันเป็นหน่วยเดียวและรวมเข้าด้วยกันเป็นหน่วยเดียว --no-ffเป็นที่ชัดเจนจากประวัติของคุณเมื่อคุณทำสาขาคุณลักษณะการควบรวมกับ
หากคุณไม่สนใจเรื่องนี้ - คุณอาจเลิกกับ FF ได้ทุกครั้งที่ทำได้ ดังนั้นคุณจะมีความรู้สึกเหมือนเวิร์กโฟลว์ svn มากขึ้น
ตัวอย่างเช่นผู้เขียนบทความนี้คิดว่า--no-ffตัวเลือกควรเป็นค่าเริ่มต้นและเหตุผลของเขาอยู่ใกล้กับที่ฉันได้อธิบายไว้ข้างต้น:
พิจารณาสถานการณ์ที่มีชุดย่อยที่ทำหน้าที่ในสาขา "ฟีเจอร์" รวมกันเป็นหนึ่งในฟีเจอร์ใหม่: ถ้าคุณเพียงแค่ทำ "git merge feature_branch" โดยไม่ต้อง--no-ff"มันเป็นไปไม่ได้ที่จะเห็นจากประวัติศาสตร์ Git ซึ่งวัตถุที่กระทำร่วมกัน ใช้งานคุณสมบัติ - คุณจะต้องอ่านข้อความบันทึกทั้งหมดด้วยตนเองการย้อนกลับคุณสมบัติทั้งหมด (เช่นกลุ่มของการกระทำ) เป็นอาการปวดหัวที่แท้จริง [หาก--no-ffไม่ได้ใช้] ในขณะที่สามารถทำได้อย่างง่ายดายหากมีการใช้--no-ffธง มันเป็นเพียงหนึ่งความมุ่งมั่น]. "
--no-ffประวัติการกระทำของคุณอาจไม่ปรากฏชัดทันทีเมื่อใช้เครื่องมือพื้นฐานเช่นgit logซึ่งจะแสดงการกระทำทั้งหมดจากสาขาทั้งหมดที่รวมอยู่ในสาขาปัจจุบันของคุณ ที่กล่าวว่าผลประโยชน์ที่กลายเป็นที่ชัดเจนเมื่อใช้เช่นgit log --first-parentในสาขาบูรณาการเช่นหรือdevelop masterหากคุณใช้อย่างถูกต้องทางศาสนา--no-ffนั่นจะแสดงเฉพาะการร้องขอรวมในขณะที่git logยังคงให้ประวัติที่ครอบคลุม (เพิ่มเติม) นั่นเป็นเหตุผลที่วินเซนต์แนะนำสำหรับการใช้งานกับGitFlow
ฉันสามารถยกตัวอย่างที่เห็นได้ทั่วไปในโครงการ
ที่นี่ตัวเลือก--no-ff(เช่นการผสานที่แท้จริง ) สร้างการคอมมิทใหม่กับผู้ปกครองหลายคนและให้การติดตามประวัติที่ดีขึ้น มิฉะนั้น--ff(เช่นการผสานการกรอไปข้างหน้า ) เป็นค่าเริ่มต้น
$ git checkout master
$ git checkout -b newFeature
$ ...
$ git commit -m 'work from day 1'
$ ...
$ git commit -m 'work from day 2'
$ ...
$ git commit -m 'finish the feature'
$ git checkout master
$ git merge --no-ff newFeature -m 'add new feature'
$ git log
// something like below
commit 'add new feature' // => commit created at merge with proper message
commit 'finish the feature'
commit 'work from day 2'
commit 'work from day 1'
$ gitk // => see details with graph
$ git checkout -b anotherFeature // => create a new branch (*)
$ ...
$ git commit -m 'work from day 3'
$ ...
$ git commit -m 'work from day 4'
$ ...
$ git commit -m 'finish another feature'
$ git checkout master
$ git merge anotherFeature // --ff is by default, message will be ignored
$ git log
// something like below
commit 'work from day 4'
commit 'work from day 3'
commit 'add new feature'
commit 'finish the feature'
commit ...
$ gitk // => see details with graph
(*) โปรดทราบว่าที่นี่หากnewFeatureสาขาถูกนำกลับมาใช้ใหม่แทนที่จะสร้างสาขาใหม่ git จะต้องทำการ--no-ffผสานต่อไป ซึ่งหมายความว่าการผสานการกรอไปข้างหน้านั้นไม่ได้มีสิทธิ์เสมอไป
เมื่อเราทำงานเกี่ยวกับสภาพแวดล้อมการพัฒนาและรวมรหัสของเราไปยังสาขาการผลิต / การผลิตแล้ว Git ไม่ไปข้างหน้าอย่างรวดเร็วสามารถเป็นตัวเลือกที่ดีกว่า โดยปกติเมื่อเราทำงานในสาขาการพัฒนาสำหรับฟีเจอร์เดียวเรามักจะมีข้อผูกพันหลายอย่าง การติดตามการเปลี่ยนแปลงที่มีการกระทำหลายรายการอาจไม่สะดวกในภายหลัง หากเรารวมกับสาขาการผลิต / การแสดงโดยใช้ Git ไม่ไปข้างหน้าอย่างรวดเร็วแล้วมันจะมีเพียง 1 การกระทำ ตอนนี้เมื่อใดก็ตามที่เราต้องการเปลี่ยนคุณสมบัติเพียงคืนสิ่งที่กระทำ ชีวิตเป็นเรื่องง่าย
มีความเป็นไปได้เช่นกันว่าบางคนอาจต้องการที่จะมีสาขาที่เป็นส่วนตัวซึ่งรหัสจะถูกวางไว้ในตอนท้ายของวัน ที่อนุญาตให้ติดตามการพัฒนาในรายละเอียดปลีกย่อย
ฉันไม่ต้องการก่อให้เกิดการพัฒนาต้นแบบด้วยรหัสที่ไม่ทำงานดังนั้นการทำ --no-ff อาจเป็นสิ่งที่เรากำลังมองหา
ตามหมายเหตุด้านข้างคุณอาจไม่จำเป็นต้องส่งรหัสการทำงานในสาขาส่วนบุคคลเนื่องจากประวัติสามารถเขียนใหม่git rebase -iและบังคับใช้บนเซิร์ฟเวอร์ตราบใดที่ไม่มีใครทำงานในสาขาเดียวกันนั้น