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 add -u: stage file đã sửa hoặc xóa, nhưng chưa thêm file mới

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

Bạn sửa code, xóa một file cũ và tạo thêm file test. Sau git add -u, phần code được stage nhưng file test vẫn đứng ngoài commit. Lệnh đã làm đúng phạm vi của nó: cập nhật các đường dẫn đã có trong index, không thêm file untracked mới.

Bài kiểm tra bằng Git 2.54.0 ngày 05/11/2026. Mọi thao tác ghi được chạy trong repository tạm do ví dụ tạo, không dùng repository công việc, không fetch hoặc push. Tài liệu git-add hiện hành được đối chiếu riêng với phiên bản thực thi; không suy luận rằng máy người đọc đã cài cùng bản Git.

Phân biệt ba nhóm thay đổi

Tình trạng file trong demo add -u add -A
Đã track, nội dung bị sửa Stage nội dung mới Stage nội dung mới
Đã track, bị xóa khỏi working tree Stage việc xóa Stage việc xóa
File mới chưa track, không bị ignore Chưa thêm Thêm vào index

Index là ảnh nội dung chuẩn bị cho commit. Stage không có nghĩa đã commit, và cũng không có nghĩa các lần sửa tiếp theo tự đi vào index. Nếu sửa file sau lần add, cần xem lại diff rồi stage phần thay đổi mới khi muốn đưa nó vào commit.

1. Tạo một repository minh họa riêng

Chạy đoạn Bash dưới đây. Toàn bộ lệnh nằm trong dấu ngoặc tròn nên thay đổi thư mục không ảnh hưởng shell đang làm việc của bạn:

(
  set -eu
  demo_dir=$(mktemp -d)
  printf '%s\n' "$demo_dir"
  cd "$demo_dir"
  git init -q
  git config user.name 'AeDev Demo'
  git config user.email '[email protected]'
  printf 'old\n' > tracked.txt
  printf 'remove later\n' > obsolete.txt
  git add -- tracked.txt obsolete.txt
  git -c commit.gpgsign=false commit -qm 'Initial demo files'

  printf 'updated\n' > tracked.txt
  rm -- obsolete.txt
  printf 'new test\n' > new-test.txt
  git add -u
  git diff --cached --name-status
  git status --short
)

Dòng đầu in đường dẫn thư mục tạm. Giữ đường dẫn ấy để kiểm tra tiếp. File obsolete.txt chỉ được xóa trong demo mới tạo; không chạy rời lệnh xóa này trong repository của bạn.

Phần diff cached phải có D cho obsolete.txt và M cho tracked.txt. status short còn có ?? new-test.txt, nghĩa là file mới vẫn untracked. Chỉ nhìn diff cached sẽ không cho thấy file mới đang đứng ngoài index.

2. Stage thêm file mới rồi đọc lại index

Mở shell ở đúng thư mục tạm vừa in, sau đó chạy các lệnh sau. Không dùng đường dẫn repository công việc để thay cho thư mục demo:

git add -A
git diff --cached --name-status
git status --short
git show :new-test.txt

Bây giờ diff cached có thêm A cho new-test.txt. Lệnh git show với dấu hai chấm đọc phiên bản của file trong index; nội dung cần thấy là new test. Bài không cần tạo thêm commit để chứng minh file đã được stage.

add -A không tự đưa file ignored mới vào index trong trường hợp thông thường. Nó cũng không phải cơ chế chọn đúng những thay đổi liên quan đến một task. Đọc danh sách và nội dung staged trước khi commit vẫn là bước cần làm.

Giới hạn phạm vi bằng pathspec

Với Git hiện đại, add -u hoặc add -A không có pathspec áp dụng trên toàn working tree, không chỉ thư mục con hiện tại. Nếu bạn đứng trong thư mục frontend rồi chạy add -u, thay đổi tracked ở nơi khác trong repository cũng có thể được stage.

Muốn giới hạn vào một thư mục, truyền pathspec sau dấu --, chẳng hạn thư mục tương đối mà bạn đã kiểm tra. Dấu -- ngăn tên đường dẫn bị đọc như option. Phân biệt việc giới hạn thư mục với việc chọn từng hunk; khi cần chọn một phần nội dung file, xem chế độ add -p.

Kiểm tra trước khi commit

Đọc cả status short để biết file còn ngoài index và diff cached để biết commit sắp chứa gì. Trong fixture, danh sách staged sau add -A phải đúng ba đường dẫn: một file mới, một file sửa, một file xóa. Nếu có đường dẫn khác, dừng lại và xác định bạn có đang ở đúng repository tạm không.

Khi sửa project thật, ưu tiên stage các đường dẫn liên quan rõ ràng rồi rà patch. Không dùng -A để chữa mọi lần “thiếu file” mà bỏ qua danh sách thay đổi; nó có thể đưa thêm nội dung bạn chưa định commit. Sau khi hiểu phạm vi -u và -A, bạn có thể chọn lệnh theo trạng thái file thay vì đoán từ tên gọi.

Nguồn tham khảo

  • Git: add –update và –all
  • Git: đọc short status và trạng thái index

Tags: GitStagingWorkflow
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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

Git rm –cached: ngừng track file và giữ bản trên máy

by Suong Nguyen
04/11/2026
0

Thử bỏ một file cấu hình demo khỏi index rồi thêm gitignore, kiểm tra file trên đĩa vẫn còn và hiểu giới hạn với lịch sử commit.

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

Git cherry-pick –no-commit: xem thay đổi trước khi tạo commit

by Suong Nguyen
03/11/2026
0

Thử cherry-pick không tạo commit trong repository tạm, rồi kiểm tra HEAD, index và working tree để biết chính xác lệnh đã làm gì.

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

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

by Suong Nguyen
02/11/2026
0

Tạo fixture có ba phiên bản của cùng file rồi dùng git show HEAD:path và :path để đọc đúng snapshot cần kiểm tra.

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.

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 pointerEvents: lớp phủ box-none vẫn cho nút con nhận chạm
  • Destructuring default: vì sao undefined nhận mặc định còn null thì không?
  • Android Uri.Builder: thêm query parameter mà không ghép chuỗi thủ công

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