zshell

แผง Git

Stage ตรวจทาน commit และ push ข้าง shell ที่สร้างการเปลี่ยนแปลง

กด Cmd+Shift+G แผงเปิด repository ที่โปรเจกต์ยึดอยู่ ดูวิธีเลือกที่ไดเรกทอรีโปรเจกต์

ทุกการกระทำเป็นคำสั่ง Git ที่ Zshell รันให้ และแสดงเอาต์พุตเมื่อมีมากกว่าเพียง “เสร็จแล้ว” จะไม่เขียนประวัติใหม่ squash หรือ force push หากคุณไม่ได้ขอ

แถบเครื่องมือ Git

Zshell แสดงแถบกะทัดรัดใต้แท็บที่ใช้งานได้ ใน repository จะแสดง branch ปัจจุบันและจำนวนบรรทัดเพิ่ม/ลบรวม หากไม่มีเปลี่ยนแปลงจะแสดง สะอาด สีเขียว ไฟล์ที่ยังไม่ track นับรวมเป็นบรรทัดเพิ่ม

  • คลิกชื่อ branch เพื่อค้นหาและสลับ branch ในเครื่อง โดย branch เริ่มต้นของ repository มีเครื่องหมายกำกับ
  • คลิกจำนวนการเปลี่ยนแปลงเพื่อเปิดแผง Git
  • นอก repository โหมด แสดงเสมอ คงปุ่ม ไม่มี Git repository ซึ่งเปิดหน้าเริ่มต้น repository ของแผง

เลือก ซ่อน, อัตโนมัติ หรือ แสดงเสมอ ที่ การตั้งค่า → ทั่วไป หรือกำหนด toolbar.visibility ค่าเริ่มต้นคือซ่อน ซ่อนแถบที่มองเห็นจากเมนูคลิกขวาได้ด้วย

ไฟล์ที่เปลี่ยน

ไฟล์แบ่งเป็นกลุ่มขัดแย้ง เปลี่ยนแปลงที่ stage แล้ว และยังไม่ stage เลื่อนเมาส์เหนือแถวเพื่อเห็นปุ่มหรือใช้เมนูคลิกขวา:

ปุ่มหน้าที่
+Stage ไฟล์
−ยกเลิก stage
↺ทิ้งการเปลี่ยนแปลงของไฟล์

ทิ้งการเปลี่ยนแปลงทั้งหมด อยู่หัวแผงและขอยืนยันก่อน นี่เป็นการกระทำที่ย้อนคืนด้วยคำสั่ง Git อีกคำสั่งไม่ได้

ไฟล์ขัดแย้งแสดง ทำเครื่องหมายว่าแก้แล้ว (Stage) แทนปุ่ม stage ปกติ เพื่อให้การแก้ขัดแย้งเป็นขั้นตอนที่ตั้งใจ

ปุ่มกรวยที่หัวแผงกรองตามชื่อไฟล์ เป็นวิธีเร็วที่สุดในการดูการเปลี่ยนแปลงขนาดใหญ่

อ่าน diff

คลิกไฟล์ที่เปลี่ยนเพื่อเปิด diff ในช่องข้างเทอร์มินัล ไม่ทับเทอร์มินัล เมนูคลิกขวามี เปิดไฟล์ เพื่อเปิดตัวไฟล์ที่แก้ไขได้ และ เปิดไฟล์ด้านข้าง

Diff ขนาดใหญ่ยังตอบสนองเร็ว ชุดเปลี่ยนแปลงพันไฟล์เปิดเร็วเท่าหนึ่งบรรทัดและเลื่อนไม่สะดุด

ตัวควบคุมเหนือ diff จำสองค่าทั่วแอป:

  • รวม / แยก สลับหนึ่งคอลัมน์กับสองฝั่งเคียงกัน
  • ตรวจทาน / แก้ไข แสดงสำหรับไฟล์ที่ยังไม่ stage ใน worktree ปัจจุบัน แก้ฝั่งใหม่ได้โดยตรงแล้ว Cmd+S เพื่อบันทึก การปิดไฟล์ที่ยังไม่บันทึกเหมือนตัวแก้ไขทั่วไป

Diff ที่ stage และ commit ในประวัติยังอ่านอย่างเดียว เพราะเป็นสแนปช็อต ไม่ใช่ไฟล์ที่ Zshell เขียนได้อย่างปลอดภัย การสลับ diff หนึ่งเป็นแก้ไขหรือแยกอัปเดตค่าของ diff อื่นที่เปิด แต่ไม่ทำให้ diff ที่ไม่รองรับแก้ไขได้

Commit

พิมพ์ข้อความแล้วใช้ปุ่ม commit หรือเลือกจากเมนู:

  • Commit ที่ stage แล้ว — commit เฉพาะสิ่งที่เตรียมไว้
  • Stage ทั้งหมดและ Commit — stage ทุกไฟล์ที่ track แล้ว commit
  • แก้ไข Commit ล่าสุด — รวมการเปลี่ยนแปลงที่ stage ไว้ใน commit ก่อนหน้า
  • Stage ทั้งหมดและแก้ไข Commit ล่าสุด

Commit ล่าสุดอยู่ด้านล่าง เมนูคลิกขวามี คัดลอก Commit Hash และ คัดลอกข้อความ Commit

Branch

ชื่อ branch ที่หัวเป็นเมนู เลือก branch อื่นเพื่อสลับ หรือ สร้าง Branch ใหม่… เพื่อเริ่มจากตำแหน่งปัจจุบัน

Worktree

แผง Git แสดงทุก worktree ของ repository พร้อม branch และเส้นทาง checkout รายการที่ใช้งานมีป้าย ปัจจุบัน คลิก worktree เพื่อเปิดแท็บเทอร์มินัลใหม่ในไดเรกทอรีนั้น แต่ละ checkout จึงมีบริบท shell ของตนเองขณะที่ยังอยู่ในโปรเจกต์เดียวกัน รายการยาวเลื่อนในพื้นที่จำกัดของตัวเอง หัวส่วน ตัวควบคุม commit และรายการไฟล์ที่เปลี่ยนคงที่ คลิกหัว worktree เพื่อยุบ/ขยาย

Worktree ที่แยก HEAD แสดง Detached HEAD แทนชื่อ branch Repository แบบ bare แสดงเพื่อให้ครบ แต่ไม่มีไดเรกทอรีทำงานจึงเปิดเป็นแท็บเทอร์มินัลไม่ได้

เซสชันเวิร์กทรี

จากเทอร์มินัลในที่เก็บ Git ภายในเครื่อง เลือก เทอร์มินัล → เซสชันใหม่ในเวิร์กทรี… หรือกด Cmd+Opt+T เมนูบริบทของแท็บและปุ่ม + ก็มีการทำงานนี้ เลือกสาขาในเครื่องที่มีอยู่หรือสาขาใหม่ และไดเรกทอรีที่ยังไม่มี สาขาใหม่เริ่มจากสาขาเริ่มต้นของที่เก็บ โดยเลือก HEAD ปัจจุบัน ได้อย่างชัดเจน สาขาที่มีอยู่คงคอมมิตปัจจุบันไว้ ไดเรกทอรีที่แนะนำอยู่ข้างเช็กเอาต์ต้นทาง

ช่องที่แยกจะสืบทอดการเชื่อมโยงเวิร์กทรี และเค้าโครงที่บันทึกไว้จะคืนค่าการเชื่อมโยงนี้ เมื่อปิดเซสชันที่เชื่อมโยง เลือก เก็บเวิร์กทรี นำเวิร์กทรีออก หรือ ยกเลิก การนำออกทำได้เมื่อไม่มีไฟล์ที่แก้ไข ไม่ได้ติดตาม หรือถูกละเว้น ไม่มีคอมมิตนอกข้อมูลอ้างอิงฐานที่บันทึก ไม่มีการล็อก และไม่มีเซสชันอื่นที่เปิดอยู่ใช้เช็กเอาต์นี้ สาขา Git จะถูกเก็บไว้เสมอ

เทอร์มินัลภายนอกสร้างและปิดเซสชันได้ด้วย zshell +session ใช้ ID จาก projects กับ --project ภายใน Zshell จะใช้โปรเจ็กต์ของเทอร์มินัลที่เรียกโดยอัตโนมัติ สร้างเซสชันในพื้นหลังเว้นแต่เพิ่ม --focus ใช้ --base HEAD หรือ --base REF เพื่อเลือกข้อมูลอ้างอิงฐานอื่น และ --worktree NEW_DIR เพื่อกำหนดไดเรกทอรี --connection FILE เลือกอินสแตนซ์ที่ทำงานอยู่เมื่อจำเป็น การปิดจะเก็บเวิร์กทรีไว้หากไม่ได้ระบุ --remove-worktree ส่วน check รายงานว่าทำความสะอาดได้อย่างปลอดภัยหรือไม่

zshell +session projects
zshell +session new --project PROJECT_ID --cwd /path/to/repo --branch feat/task
zshell +session list --project PROJECT_ID
zshell +session check --project PROJECT_ID --session SESSION_ID
zshell +session close --project PROJECT_ID --session SESSION_ID --remove-worktree

Remote

เมนู ⋯ รวมสิ่งที่ติดต่อ remote:

การกระทำหน้าที่
Fetchอัปเดต ref ที่ติดตาม remote
Pull (เฉพาะ Fast-forward)Pull โดยปฏิเสธการสร้าง merge commit
Pushส่ง branch ปัจจุบัน
เผยแพร่ BranchPush branch ที่ยังไม่มี upstream และให้เลือก remote เมื่อมีหลายตัว
ซิงค์การเปลี่ยนแปลงPull แบบ fast-forward แล้ว push
Stash การเปลี่ยนแปลงทั้งหมดเก็บทุกอย่างรวมไฟล์ที่ยังไม่ track
Pop Stashกู้ stash ล่าสุด

ป้ายข้าง branch บอกจำนวน commit ที่ ↓ ตามหลัง และ ↑ นำหน้า upstream

เมนูเดียวกันมี คัดลอกเส้นทางที่เปลี่ยน, คัดลอกเส้นทาง Repository และ แสดง Repository ใน Finder

Pull จำกัด fast-forward โดยตั้งใจ หากต้อง merge หรือ rebase จริง Git จะแจ้งและให้คุณตัดสินใจในเทอร์มินัล แผงไม่เลือกกลยุทธ์แทนคุณ

ยังไม่มี Repository

หากไดเรกทอรีโปรเจกต์ไม่มี repository แผงเสนอ เริ่มต้น Repository ซึ่งรัน git init ในโฟลเดอร์นั้น ก่อนเริ่มต้นแผงจะไม่รบกวนการทำงาน

ตรวจทานรอบของเอเจนต์

คลิก ตรวจทานการเปลี่ยนแปลง… ในแผง Git

  • รอบล่าสุด เปรียบเทียบสแนปช็อตเริ่มและจบของเอเจนต์ที่เลือก รวมการแก้ไขทั้งหมดในช่วงนั้นโดยไม่ขึ้นกับผู้แก้ไข
  • ยังไม่คอมมิต เปรียบเทียบ HEAD กับต้นไม้การทำงาน รวมไฟล์ที่สเตจแล้วและยังไม่ติดตาม
  • ทั้งสาขา เปรียบเทียบบรรพบุรุษร่วมกับสาขาฐานที่เลือกกับต้นไม้การทำงาน รวมคอมมิตและไฟล์ที่ยังไม่คอมมิต

เลือกไฟล์และส่วนที่เปลี่ยน ในรอบล่าสุด เก็บส่วนนี้ บันทึกการตรวจทาน ส่วน ย้อนกลับส่วนนี้ ย้อนการเปลี่ยนในต้นไม้การทำงาน ทั้งสองไม่แก้ดัชนี Git และยังแสดงสแนปช็อตเดิมกับผลการตัดสินใจ

จะปฏิเสธการย้อนกลับหากไฟล์หรือ HEAD เปลี่ยนภายหลัง เส้นทางไม่ปลอดภัย มีเอเจนต์ทำงาน หรือรอบทับซ้อนกัน การเปลี่ยนไบนารีหรือเฉพาะสิทธิ์ดูได้อย่างเดียว ไฟล์เกิน 5 MiB ใช้ไม่ได้ เช่นเดียวกับสแนปช็อตที่เกิน 2,048 เส้นทางที่เปลี่ยน เนื้อหา 25 MiB หรือเวลาที่กำหนด

สแนปช็อตอยู่เฉพาะเซสชันแอปปัจจุบัน ต้องมีเหตุการณ์เริ่มและจบที่เชื่อถือได้ Pi, OpenCode และ Grok มีการผสานโดยตรง พรอมป์ต์ที่ป้องกันจะบันทึกจุดเริ่ม แต่ยังต้องมีเหตุการณ์จบ หากไม่มีจะแจ้งว่าไม่มีสแนปช็อตที่เสร็จสมบูรณ์