aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Git show: đọc file ở HEAD và index mà không checkout

Suong Nguyen by Suong Nguyen
02/11/2026
in Hướng dẫn
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Bạn muốn xem file đã commit trong khi working tree đang sửa dở. Không cần chuyển nhánh hay hoàn tác file hiện tại chỉ để đọc nội dung. git show nhận tên object, trong đó cú pháp có dấu hai chấm giúp chỉ ra phiên bản file trong commit hoặc index.

Các lệnh bên dưới đã được chạy với Git 2.54.0 trong repository tạm độc lập. Tài liệu git-show, gitrevisions và git-ls-files được đối chiếu ngày 02/11/2026. Không fetch, push hoặc sửa repository của blog. Bài tập trung file text thông thường, chưa kiểm tra Git LFS, submodule hay xung đột merge thực tế.

Tạo ba nội dung khác nhau một cách có chủ ý

Snippet chạy trong subshell Bash, thư mục tạo bằng mktemp được in để bạn nhận biết. Nó để lại repository thử cho bạn xem tiếp; không có lệnh xóa thư mục tự động:

(
  set -eu
  demo_dir=$(mktemp -d)
  echo "$demo_dir"
  cd "$demo_dir"
  git init -q
  git config user.name 'AeDev Demo'
  git config user.email '[email protected]'
  printf 'committed\n' > note.txt
  git add note.txt
  git -c core.hooksPath=/dev/null commit -qm 'Initial note'
  printf 'staged\n' > note.txt
  git add note.txt
  printf 'working\n' > note.txt

  git show HEAD:note.txt
  git show :note.txt
  cat note.txt
  git status --short
)

Kết quả đã kiểm tra lần lượt là committed, staged, working; status có MM note.txt. Ba nơi đang giữ ba snapshot riêng: HEAD là commit hiện tại, index chứa phần đã stage cho commit tiếp theo, working tree là file bạn đang đọc bằng công cụ thông thường.

Fixture cố ý dùng file mới đơn giản và tắt hook cho lần commit demo. Trong lần kiểm tra biên tập, cấu hình Git global/system cũng được cô lập. Với máy có cấu hình ký commit toàn cục, có thể cần cấu hình repository thử phù hợp trước khi chạy; lệnh demo không điều chỉnh cấu hình toàn máy.

Dấu hai chấm là một phần tên object

HEAD:note.txt nói “blob ở đường dẫn note.txt trong tree của HEAD”. :note.txt nói “blob tại đường dẫn đó trong index, stage 0”. Đừng biến chúng thành git show HEAD -- note.txt: dạng đó có mục đích xem commit và giới hạn path trong phần thay đổi, không phải yêu cầu in nguyên blob bằng cùng cú pháp.

Nếu đường dẫn có khoảng trắng, quote cả đối số, chẳng hạn git show 'HEAD:docs/design note.md'. Bình thường path sau dấu hai chấm được hiểu từ gốc repository; dùng ./ hoặc ../ có quy tắc tương đối được tài liệu gitrevisions mô tả. Khi chưa chắc, chạy từ gốc repository và ghi đường dẫn rõ ràng sẽ dễ review hơn.

Kiểm tra thao tác đọc không làm đổi dữ liệu

Trong thư mục thử đã in ra, bạn có thể chạy thêm:

git ls-files --stage -- note.txt
git diff --cached -- note.txt
git diff -- note.txt
git show HEAD:note.txt
git show :note.txt
cat note.txt

Các thao tác đọc trên đã được kiểm tra giữ nguyên nội dung working tree, blob index và HEAD của fixture. Trong output ls-files --stage, số stage là 0 khi chưa có xung đột. File chưa từng add không có entry index để :path đọc; file không có trong commit cũng không thể đọc bằng HEAD:path.

Nếu đang merge conflict, stage 0 có thể không tồn tại và các stage 1, 2, 3 mang vai trò khác nhau. Hãy xem index và trạng thái merge trước, không suy rằng lỗi đọc :path nghĩa Git làm mất file. Bài này không đưa quy trình giải quyết conflict tự động.

Tránh biến một lần xem thành một lần ghi

git show HEAD:note.txt in ra stdout. Nếu bạn thêm > note.txt, chính shell sẽ mở file để ghi và thay nội dung working tree. Đó là thao tác khác, không còn chỉ xem. Với file binary, tránh in trực tiếp vào terminal; chọn đích xuất riêng sau khi xác định rõ nhu cầu.

Khi điều tra một lỗi, ghi lại commit hoặc ref đã đọc cùng đường dẫn. HEAD có thể đổi sau một commit mới, còn object ID cụ thể giúp người khác mở đúng snapshot. Chọn đúng nguồn HEAD, index hay working tree trước khi đọc giúp bạn hiểu thay đổi mà không phải làm gián đoạn phần đang sửa.

Nguồn tham khảo

  • Git: git-show
  • Git: cú pháp revision:path và stage trong index
  • Git: git-ls-files –stage

Tags: DebuggingGitWorkflow
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Git diff –quiet: kiểm tra thay đổi nhưng đừng quên untracked

by Suong Nguyen
01/11/2026
0

Đọc exit status của git diff --quiet, chọn đúng phía staged hoặc unstaged và kiểm tra riêng file chưa được track.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Git merge-base –is-ancestor: nhánh đã chứa commit này chưa?

by Suong Nguyen
31/10/2026
0

Kiểm tra quan hệ tổ tiên giữa hai commit bằng exit status và phân biệt chưa chứa commit với lỗi tham chiếu.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Git archive: xuất đúng snapshot của commit, không lẫn file đang sửa

by Suong Nguyen
30/10/2026
0

Tạo tar từ HEAD và dùng fixture ba phiên bản để kiểm tra archive không lấy nội dung staged hay working tree.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Git gitattributes: phân biệt LF trong index và CRLF ở working tree

by Suong Nguyen
29/10/2026
0

Dùng git check-attr và git ls-files --eol để chẩn đoán line ending mà không đổi cấu hình Git toàn máy.

Next Post
Minh họa môi trường phát triển React Native với laptop, Android emulator và iOS simulator

Android getString: dùng placeholder có thứ tự để dịch nguyên câu

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native onLayout: đo vùng card thay vì lấy chiều rộng cửa sổ
  • Object.freeze chỉ đóng băng nông: giải thích bằng assertion
  • Android getString: dùng placeholder có thứ tự để dịch nguyên câu

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply