Gitกวดวิชา


Gitและ {{title}}


Git Contribute


Git Advanced


Git Undo




สาขากิตติ์


การทำงานกับ 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(-)

ตอนนี้ เรามีวิธีแก้ไขที่พร้อมสำหรับผู้เชี่ยวชาญแล้ว และเราจำเป็นต้องรวมสองสาขาเข้าด้วยกัน

ทดสอบตัวเองด้วยแบบฝึกหัด

ออกกำลังกาย:

สร้างสาขาใหม่ชื่อhello-world-images:

git