สาขากิตติ์
การทำงานกับ Git Branches
ใน Git a branch
คือเวอร์ชันใหม่/แยกของที่เก็บหลัก
สมมติว่าคุณมีโครงการขนาดใหญ่ และคุณจำเป็นต้องอัปเดตการออกแบบ
มันจะทำงานอย่างไรหากไม่มีและกับ Git:
ไม่มี Git:
- ทำสำเนาของไฟล์ที่เกี่ยวข้องทั้งหมดเพื่อหลีกเลี่ยงผลกระทบต่อเวอร์ชันที่ใช้งานจริง
- เริ่มทำงานกับการออกแบบและพบว่าโค้ดนั้นขึ้นอยู่กับโค้ดในไฟล์อื่นๆ ซึ่งจำเป็นต้องเปลี่ยนด้วย!
- ทำสำเนาของไฟล์ที่ขึ้นต่อกันด้วย ตรวจสอบให้แน่ใจว่าทุกการขึ้นต่อกันของไฟล์อ้างอิงชื่อไฟล์ที่ถูกต้อง
- ภาวะฉุกเฉิน! มีข้อผิดพลาดที่ไม่เกี่ยวข้องที่อื่นในโครงการที่ต้องแก้ไขโดยเร็วที่สุด!
- บันทึกไฟล์ทั้งหมดของคุณ จดชื่อสำเนาที่คุณกำลังทำงานอยู่
- ทำงานกับข้อผิดพลาดที่ไม่เกี่ยวข้องและอัปเดตรหัสเพื่อแก้ไข
- กลับไปที่การออกแบบและทำงานให้เสร็จที่นั่น
- คัดลอกโค้ดหรือเปลี่ยนชื่อไฟล์ เพื่อให้การออกแบบที่อัปเดตเป็นเวอร์ชันที่ใช้งานจริง
- (2 สัปดาห์ต่อมา คุณตระหนักว่าข้อผิดพลาดที่ไม่เกี่ยวข้องไม่ได้รับการแก้ไขในเวอร์ชันการออกแบบใหม่ เนื่องจากคุณคัดลอกไฟล์ก่อนการแก้ไข)
ด้วย Git:
- ด้วยสาขาใหม่ที่เรียกว่าการออกแบบใหม่ แก้ไขรหัสโดยตรงโดยไม่ส่งผลกระทบต่อสาขาหลัก
- ภาวะฉุกเฉิน! มีข้อผิดพลาดที่ไม่เกี่ยวข้องที่อื่นในโครงการที่ต้องแก้ไขโดยเร็วที่สุด!
- สร้างสาขาใหม่จากโครงการหลักที่เรียกว่า small-error-fix
- แก้ไขข้อผิดพลาดที่ไม่เกี่ยวข้องและรวมสาขาแก้ไขข้อผิดพลาดเล็ก ๆ กับสาขาหลัก
- คุณกลับไปที่สาขาออกแบบใหม่และทำงานให้เสร็จที่นั่น
- รวมสาขาที่ออกแบบใหม่เข้ากับ main (รับการแจ้งเตือนถึงการแก้ไขข้อผิดพลาดเล็กๆ น้อยๆ ที่คุณหายไป)
สาขาช่วยให้คุณทำงานในส่วนต่างๆ ของโครงการได้โดยไม่กระทบต่อสาขาหลัก
เมื่องานเสร็จสมบูรณ์ สามารถรวมสาขาเข้ากับโครงการหลักได้
คุณยังสามารถสลับระหว่างสาขาและทำงานในโครงการต่างๆ ได้โดยไม่รบกวนซึ่งกันและกัน
การแตกสาขาใน Git นั้นเบาและรวดเร็วมาก!
New Git สาขา
ให้เพิ่มคุณสมบัติใหม่ให้กับindex.html
เพจ ของเรา
เรากำลังดำเนินการในพื้นที่เก็บข้อมูลของเรา และเราไม่ต้องการรบกวนหรือทำลายโครงการหลัก
ดังนั้นเราจึงสร้างใหม่branch
:
ตัวอย่าง
git branch hello-world-images
ตอนนี้เราสร้างชื่อใหม่branch
" hello-world-images
"
มายืนยันว่าเราได้สร้างใหม่branch
:
ตัวอย่าง
git branch
hello-world-images
* master
เราสามารถเห็นสาขาใหม่ที่มีชื่อว่า "hello-world-images" แต่*
ด้านข้าง
master
ระบุว่าเราอยู่ในbranch
นั้น
checkout
เป็นคำสั่งที่ใช้ตรวจสอบไฟล์branch
. ย้ายเราจากปัจจุบัน
branch
ไปยังรายการที่ระบุท้ายคำสั่ง:
ตัวอย่าง
git checkout hello-world-images
Switched to branch 'hello-world-images'
ตอนนี้เราได้ย้ายพื้นที่ทำงานปัจจุบันของเราจากสาขาหลักไปยังใหม่
branch
เปิดตัวแก้ไขที่คุณชื่นชอบและทำการเปลี่ยนแปลงบางอย่าง
สำหรับตัวอย่างนี้ เราได้เพิ่มรูปภาพ (img_hello_world.jpg) ลงในโฟลเดอร์การทำงานและโค้ดหนึ่งบรรทัดใน
index.html
ไฟล์:
ตัวอย่าง
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space"
style="width:100%;max-width:960px"></div>
<p>This is the first
file in my new Git Repo.</p>
<p>A new line in our file!</p>
</body>
</html>
เราได้ทำการเปลี่ยนแปลงไฟล์และเพิ่มไฟล์ใหม่ในไดเร็กทอรีการทำงาน (ไดเร็กทอรีเดียวกันกับmain
branch
)
ตรวจสอบสถานะปัจจุบันbranch
:
ตัวอย่าง
git status
On branch hello-world-images
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
img_hello_world.jpg
no changes added to commit (use "git add" and/or "git commit -a")
มาดูกันว่าเกิดอะไรขึ้นที่นี่:
- มีการเปลี่ยนแปลงใน index.html ของเรา แต่ไฟล์ไม่ได้ถูกจัดฉากสำหรับ
commit
img_hello_world.jpg
ไม่ใช่tracked
ดังนั้น เราจำเป็นต้องเพิ่มทั้งสองไฟล์ใน Staging Environment สำหรับสิ่งนี้
branch
:
ตัวอย่าง
git add --all
การใช้--all
แทนชื่อไฟล์แต่ละรายการจะทำให้ไฟล์มีการเปลี่ยนแปลง (ใหม่ แก้ไข และลบ) ทั้งหมด
ตรวจสอบstatus
ของ
branch
:
ตัวอย่าง
git status
On branch hello-world-images
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: img_hello_world.jpg
modified: index.html
เรามีความสุขกับการเปลี่ยนแปลงของเรา ดังนั้นเราจะมอบพวกเขาให้กับ
branch
:
ตัวอย่าง
git commit -m "Added image to Hello World"
[hello-world-images 0312c55] Added image to Hello World
2 files changed, 1 insertion(+)
create mode 100644 img_hello_world.jpg
ตอนนี้เรามีแบบใหม่ ที่แตก ต่างbranch
จากต้นแบบbranch
หมายเหตุ:การใช้-b
ตัวเลือกเปิดcheckout
จะสร้างสาขาใหม่และย้ายไปที่สาขานั้น หากไม่มีอยู่
การสลับระหว่างสาขา
ตอนนี้เรามาดูกันว่าการทำงานกับสาขาต่างๆ ทำได้เร็วและง่ายเพียงใด และทำงานได้ดีเพียงใด
ขณะนี้เราอยู่ที่hello-world-images
สาขา เราเพิ่มรูปภาพลงในสาขานี้แล้ว เรามาแสดงรายการไฟล์ในไดเร็กทอรีปัจจุบันกัน:
ตัวอย่าง
ls
README.md bluestyle.css img_hello_world.jpg index.html
เราสามารถเห็นไฟล์ใหม่img_hello_world.jpg
และหากเราเปิดไฟล์ html เราจะเห็นว่าโค้ดมีการเปลี่ยนแปลง ทุกอย่างเป็นไปตามที่ควรจะเป็น
ทีนี้มาดูว่าจะเกิดอะไรขึ้นเมื่อเราเปลี่ยนสาขาเป็น master
ตัวอย่าง
git checkout master
Switched to branch 'master'
ภาพใหม่ไม่ได้เป็นส่วนหนึ่งของสาขานี้ แสดงรายการไฟล์ในไดเร็กทอรีปัจจุบันอีกครั้ง:
ตัวอย่าง
ls
README.md bluestyle.css index.html
img_hello_world.jpg
ไม่อยู่แล้ว! และถ้าเราเปิดไฟล์ html เราจะเห็นโค้ดที่เปลี่ยนกลับเป็นโค้ดเดิมก่อนการเปลี่ยนแปลง
ดูว่าทำงานกับสาขาง่ายแค่ไหน? และสิ่งนี้ช่วยให้คุณทำงานต่าง ๆ ได้อย่างไร?
สาขาฉุกเฉิน
ลองนึกภาพว่าเรายังไม่ได้ทำ Hello-world-images แต่เราต้องแก้ไขข้อผิดพลาดในต้นแบบ
ฉันไม่ต้องการยุ่งกับอาจารย์โดยตรง และฉันไม่ต้องการที่จะยุ่งกับภาพสวัสดีโลก เพราะมันยังไม่เสร็จ
ดังนั้นเราจึงสร้างสาขาใหม่เพื่อรับมือกับเหตุฉุกเฉิน:
ตัวอย่าง
git checkout -b emergency-fix
Switched to a new branch 'emergency-fix'
ตอนนี้เราได้สร้างสาขาใหม่จากมาสเตอร์และเปลี่ยนเป็นสาขานั้น เราสามารถแก้ไขข้อผิดพลาดได้อย่างปลอดภัยโดยไม่รบกวนสาขาอื่น
มาแก้ไขข้อผิดพลาดจินตภาพของเรา:
ตัวอย่าง
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<p>This is the first
file in my new Git Repo.</p>
<p>This line is here to show how
merging works.</p>
</body>
</html>
เราได้ทำการเปลี่ยนแปลงในไฟล์นี้ และเราจำเป็นต้องรับการเปลี่ยนแปลงเหล่านั้นไปยังมาสเตอร์แบรนช์
ตรวจสอบสถานะ:
ตัวอย่าง
git status
On branch emergency-fix
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
สเตจไฟล์และคอมมิต:
ตัวอย่าง
git add index.html
git commit -m "updated index.html with emergency fix"
[emergency-fix dfa79db] updated index.html with emergency fix
1 file changed, 1 insertion(+), 1 deletion(-)
ตอนนี้ เรามีวิธีแก้ไขที่พร้อมสำหรับผู้เชี่ยวชาญแล้ว และเราจำเป็นต้องรวมสองสาขาเข้าด้วยกัน