Branch

មាតិកា

  1. ហេតុអ្វីត្រូវមាន Branch?
  2. តើ Branch ពិតជាអ្វី
  3. បង្កើត Branch ហើយប្តូរទៅវា
  4. ធ្វើការនៅលើ Branch
  5. ការប្តូរ Branch ធ្វើឲ្យ File របស់អ្នកផ្លាស់ប្តូរ
  6. ការ Merge៖ Fast-Forward
  7. ការ Merge៖ Merge Commit
  8. ការសម្អាត និងការដាក់ឈ្មោះ Branch
  9. សាកល្បងដោយខ្លួនឯង

1. ហេតុអ្វីត្រូវមាន Branch?

រហូតមកដល់ពេលនេះ commit នីមួយៗសុទ្ធតែរៀបតាមបន្ទាត់តែមួយ នៅលើ main។ វាមិនអីទេសម្រាប់ការផ្លាស់ប្តូរតូចៗ ប៉ុន្តែស្រមៃមើល៖ អ្នកចាប់ផ្តើមបង្កើតទំព័រថ្មីមួយ ធ្វើបានពាក់កណ្តាល ហើយស្រាប់តែត្រូវកែកំហុសអក្ខរាវិរុទ្ធបន្ទាន់មួយនៅលើ website ដែលកំពុងដំណើរការ។ ទំព័រដែលធ្វើមិនទាន់រួចរបស់អ្នកបានលាយឡំជាមួយអ្វីៗផ្សេងទៀតអស់ហើយ។

Branch គឺជាខ្សែការងារដាច់ដោយឡែកមួយ។ អ្នកបង្កើតវា ធ្វើ commit របស់អ្នកនៅទីនោះ ហើយ main នៅដដែលដូចមុនទាំងស្រុង។ នៅពេលការងាររួចរាល់ ហើយដំណើរការបានល្អ អ្នក merge វាត្រឡប់ចូល main វិញ។ ប្រសិនបើគំនិតនោះមិនបានសម្រេច អ្នកគ្រាន់តែលុប branch នោះចោល ហើយ main មិនដឹងអ្វីសោះ។

នៅក្នុងក្រុមពិតៗ ច្បាប់ជាធម្មតាគឺ៖ main ត្រូវតែដំណើរការជានិច្ច។ រាល់ feature ថ្មី ឬការកែកំហុសនីមួយៗ ត្រូវធ្វើនៅលើ branch ផ្ទាល់ខ្លួនរបស់វាជាមុនសិន។

2. តើ Branch ពិតជាអ្វី

ឮពាក្យ branch ហាក់ដូចជាធ្ងន់ ប៉ុន្តែតាមពិតវាជារបស់ស្រាលបំផុតមួយនៅក្នុង Git។

Commit នីមួយៗរក្សាទុក pointer មួយដែលចង្អុលទៅ commit មុនវា (ហៅថា parent របស់វា) ដូច្នេះ commit ទាំងអស់តភ្ជាប់គ្នាជាខ្សែសង្វាក់៖

3f2a1c9 ← c47a2e9 ← 8b1e4d0 ← 1c7e5a2
                                  ↑
                                main ← HEAD

Branch គ្រាន់តែជាស្លាកមួយដែលចង្អុលទៅ commit មួយប៉ុណ្ណោះ។ នៅពេលអ្នក commit ស្លាកនោះរំកិលទៅមុខទៅ commit ថ្មី។ ហើយ HEAD — «អ្នកនៅទីនេះ» ពីជំពូកទី 4 — ចង្អុលទៅ branch ដែលអ្នកកំពុងនៅ។

មានតែប៉ុណ្ណឹងឯង។ ការបង្កើត branch មិនចម្លង file ណាមួយទេ វាគ្រាន់តែសរសេរស្លាកថ្មីមួយ។ វាលឿនភ្លាមៗ សូម្បីតែនៅក្នុង project ធំសម្បើមក៏ដោយ។

3. បង្កើត Branch ហើយប្តូរទៅវា

បង្ហាញ branch របស់អ្នក៖

git branch
* main

មានតែមួយ ហើយសញ្ញា * បង្ហាញថាអ្នកកំពុងនៅលើវា។ ឥឡូវនេះ បង្កើត branch មួយសម្រាប់ទំព័រ About ថ្មី ហើយប្តូរទៅវាក្នុងជំហានតែមួយ៖

git switch -c add-about
Switched to a new branch 'add-about'

(-c មានន័យថា «create» គឺបង្កើត។ ដើម្បីប្តូរទៅ branch ដែលមានស្រាប់ គ្រាន់តែកុំដាក់វា៖ git switch main។)

git branch
* add-about
  main

សម្រាប់ពេលនេះ ស្លាកទាំងពីរចង្អុលទៅ commit តែមួយ៖

3f2a1c9 ← c47a2e9 ← 8b1e4d0 ← 1c7e5a2
                                  ↑
                          main, add-about ← HEAD

អ្នកប្រហែលជាឃើញ git checkout -b add-about នៅក្នុងមេរៀនចាស់ៗ។ វាធ្វើការដូចគ្នា។ git switch គឺជា command ថ្មីជាង និងច្បាស់ជាង។

4. ធ្វើការនៅលើ Branch

បង្កើត about.html៖

<!DOCTYPE html>
<html>
  <head>
    <title>About Dara</title>
  </head>
  <body>
    <h1>About me</h1>
    <p>I'm a student who likes building things.</p>
    <p><a href="index.html">Back home</a></p>
  </body>
</html>

ហើយបន្ថែម link ទៅវានៅក្នុង index.html ពីលើ </body>៖

    <p><a href="about.html">About me</a></p>

Commit ដូចធម្មតា៖

git add .
git commit -m "Add about page"

មានតែ branch ដែលអ្នកកំពុងនៅប៉ុណ្ណោះដែលរំកិលទៅមុខ។ main នៅពីក្រោយ៖

3f2a1c9 ← c47a2e9 ← 8b1e4d0 ← 1c7e5a2 ← b3d5f82
                                  ↑         ↑
                                main    add-about ← HEAD

5. ការប្តូរ Branch ធ្វើឲ្យ File របស់អ្នកផ្លាស់ប្តូរ

ឥឡូវដល់ផ្នែកដែលធ្វើឲ្យមនុស្សភ្ញាក់ផ្អើល។ បើក file manager ឬបញ្ជី file របស់ VS Code ទុកឲ្យមើលឃើញ រួចប្តូរត្រឡប់ទៅវិញ៖

git switch main

about.html បាត់ទៅ ហើយ link ក៏បាត់ពី index.html ដែរ។ កុំភ័យ — គ្មានអ្វីបាត់បង់ទេ។ Git បានប្តូរ file នៅក្នុង working directory របស់អ្នកឲ្យត្រូវនឹង commit ដែល main ចង្អុលទៅ ហើយនៅទីនោះទំព័រ About មិនទាន់មាននៅឡើយ។ ប្តូរត្រឡប់ទៅវិញ៖

git switch add-about

…ហើយវាត្រឡប់មកវិញហើយ។ Folder តែមួយ ប៉ុន្តែមានច្រើនកំណែ ហើយ Git ប្តូររវាងពួកវាភ្លាមៗ។

ប្រសិនបើអ្នកមានការផ្លាស់ប្តូរដែល មិនទាន់ commit ហើយវានឹងត្រូវសរសេរជាន់ Git នឹងបដិសេធមិនប្តូរ branch ហើយប្រាប់អ្នកពីមូលហេតុ។ Commit វាជាមុនសិន (ឬបោះវាចោលដោយប្រើ git restore)។ ត្រូវពិនិត្យ git status ជានិច្ចមុនពេលប្តូរ branch។

6. ការ Merge៖ Fast-Forward

ទំព័រ About រួចរាល់ហើយ។ ដើម្បីនាំវាចូល main ត្រូវ ប្តូរទៅ branch ដែលអ្នកចង់ merge ចូល ជាមុនសិន រួច merge branch មួយទៀត៖

git switch main
git merge add-about
Updating 1c7e5a2..b3d5f82
Fast-forward
 about.html | 11 +++++++++++
 index.html |  1 +
 2 files changed, 12 insertions(+)
 create mode 100644 about.html

Fast-forward មានន័យថា main មិនបានរំកិលទេ ចាប់តាំងពីពេលដែល branch ត្រូវបានបង្កើត ដូច្នេះ Git មិនចាំបាច់បញ្ចូលអ្វីទាំងអស់។ វាគ្រាន់តែរុញស្លាក main ទៅមុខដល់ commit ដដែល៖

3f2a1c9 ← c47a2e9 ← 8b1e4d0 ← 1c7e5a2 ← b3d5f82
                                            ↑
                                      main, add-about

(HEAD នៅលើ main ព្រោះនោះជា branch ដែលអ្នកបានប្តូរទៅ។)

7. ការ Merge៖ Merge Commit

Fast-forward គឺជាករណីងាយស្រួល។ ក្នុងជីវិតពិត main តែងតែរំកិលទៅមុខ ខណៈពេលដែលអ្នកកំពុងធ្វើការលើ branch មួយ — សមាជិកក្រុមបាន merge អ្វីមួយ ឬអ្នកបានកែកំហុសអក្ខរាវិរុទ្ធ។ តោះបង្កើតស្ថានភាពនោះ។

ចាប់ផ្តើម branch មួយសម្រាប់ទំព័រ contact៖

git switch -c add-contact

បង្កើត contact.html៖

<!DOCTYPE html>
<html>
  <head>
    <title>Contact Dara</title>
  </head>
  <body>
    <h1>Say hello</h1>
    <p>Email me at dara@example.com</p>
    <p><a href="index.html">Back home</a></p>
  </body>
</html>
git add contact.html
git commit -m "Add contact page"

ឥឡូវត្រឡប់ទៅ main វិញ ហើយធ្វើការផ្លាស់ប្តូរ ផ្សេង មួយនៅទីនោះ — កែប្រយោគនៅក្នុង about.html៖

git switch main
    <p>I'm a student in Phnom Penh who likes building websites.</p>
git add about.html
git commit -m "Update about page text"

ឥឡូវនេះ branch ទាំងពីរបានដើរទៅទិសដៅខុសៗគ្នា៖

                ┌── 7e1a0c6  "Update about page text"   ← main
... ← b3d5f82 ──┤
                └── 2f9d7b4  "Add contact page"         ← add-contact

Merge ដូចមុន៖

git merge add-contact

លើកនេះ Git មិនអាចគ្រាន់តែរុញស្លាកទៅមុខបានទេ។ វាបញ្ចូលខ្សែការងារទាំងពីរចូលគ្នា ហើយកត់ត្រាលទ្ធផលជា merge commit ថ្មីមួយ — ជា commit ដែលមាន parent ពីរ។ Editor របស់អ្នកបើកឡើងជាមួយ message Merge branch 'add-contact'។ Message នោះល្អហើយ៖ រក្សាទុក រួចបិទ។

មើលរូបរាងនៃ history របស់អ្នកដោយប្រើ៖

git log --oneline --graph
*   5a8c3e1 (HEAD -> main) Merge branch 'add-contact'
|\
| * 2f9d7b4 (add-contact) Add contact page
* | 7e1a0c6 Update about page text
|/
* b3d5f82 (add-about) Add about page
* 1c7e5a2 Revert "Add favorite food"
...

អានបន្ទាត់នៅខាងឆ្វេងដូចជាផ្លូវរថភ្លើង៖ branch ទាំងពីរបែកចេញពីគ្នាបន្ទាប់ពី b3d5f82 ហើយជួបគ្នាវិញនៅ merge commit។ ឥឡូវ main មានទាំងទំព័រ contact និងអត្ថបទ about ថ្មី។

Git អាចបញ្ចូលការងារទាំងនេះដោយស្វ័យប្រវត្តិ ព្រោះ branch ទាំងពីរបានផ្លាស់ប្តូរ ផ្នែកខុសៗគ្នា នៃ project។ នៅពេលដែល branch ពីរផ្លាស់ប្តូរ បន្ទាត់ដដែល Git មិនអាចសម្រេចចិត្តដោយខ្លួនឯងបានទេ — នោះហើយជា merge conflict ហើយវាជាប្រធានបទនៃជំពូកបន្ទាប់។

8. ការសម្អាត និងការដាក់ឈ្មោះ Branch

នៅពេល branch មួយត្រូវបាន merge រួច ស្លាករបស់វាមិនត្រូវការទៀតទេ។ លុបវាចោល៖

git branch -d add-about
git branch -d add-contact

នេះគ្រាន់តែលុបស្លាកប៉ុណ្ណោះ — commit ទាំងអស់ស្ថិតនៅក្នុង main ដោយសុវត្ថិភាព។ Git ថែមទាំងបដិសេធជាមួយ -d ប្រសិនបើ branch មួយមាន commit ដែលមិនទាន់បាន merge នៅកន្លែងណាមួយ ដូច្នេះអ្នកមិនអាចបាត់បង់ការងារដោយចៃដន្យបានទេ។ (-D អក្សរធំ គឺបង្ខំឲ្យលុប។ ត្រូវប្រាកដសិនមុនពេលប្រើវា។)

ឈ្មោះ branch ល្អគួរពិពណ៌នាពីការងារ ដោយប្រើអក្សរតូច និងសញ្ញា dash៖

  • add-contact-page
  • fix-broken-footer-link
  • update-profile-photo

ក្រុមជាច្រើនបន្ថែម prefix ដូចជា feature/add-contact-page ឬ fix/footer-link។ ធ្វើតាមអ្វីដែលក្រុមរបស់អ្នកធ្វើ។

9. សាកល្បងដោយខ្លួនឯង

  1. បង្កើត branch មួយ ហើយមើលវារំកិល។ បង្កើត add-about commit ទំព័រ About ហើយប្រើ git log --oneline លើ branch ទាំងពីរ ដើម្បីមើលថាស្លាកនីមួយៗចង្អុលទៅ commit មួយណា។
  2. មើល file របស់អ្នកផ្លាស់ប្តូរ។ ប្តូររវាង main និង add-about ខណៈពេលបើកបញ្ជី file ទុក ហើយមើល about.html លេចឡើង និងបាត់ទៅ។
  3. Fast-forward merge add-about ចូល main។
  4. បង្កើត merge commit មួយ។ បង្កើត add-contact commit នៅទីនោះ រួច commit ការផ្លាស់ប្តូរផ្សេងមួយនៅលើ main ហើយ merge។ មើល git log --oneline --graph។
  5. សាកល្បងការពិសោធន៍ដែលអាចបោះចោលបាន។ បង្កើត branch មួយឈ្មោះ crazy-idea លុបពាក់កណ្តាលនៃ index.html ហើយ commit។ បន្ទាប់មកប្តូរត្រឡប់ទៅ main វិញ (នៅទីនោះអ្វីៗនៅល្អដដែល) ហើយលុបការពិសោធន៍នោះចោលដោយប្រើ git branch -D crazy-idea។ នោះហើយជាភាពងាយស្រួលនៃការសាកល្បងគំនិតមួយ។

បន្ទាប់ តោះធ្វើឲ្យ branch ពីរផ្លាស់ប្តូរបន្ទាត់ដដែល — ដោយចេតនា។

ទិញកាហ្វេជូនខ្ញុំ

ចូលចិត្តមេរៀននេះមែនទេ? សូមពិចារណាទិញកាហ្វេជូនខ្ញុំមួយកែវ ដើម្បីគាំទ្រការបង្កើតមាតិកាឥតគិតថ្លៃបន្ថែមទៀត!