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 mv: đổi tên đã vào index, sửa nội dung sau đó vẫn cần stage

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

Bạn đổi tên file bằng git mv, sửa thêm một dòng rồi commit. Tên mới có trong commit nhưng phần sửa cuối chưa xuất hiện. git mv cập nhật index khi hoàn tất; nó không tự stage những lần sửa nội dung diễn ra sau lệnh đó.

Bài đối chiếu tài liệu git-mv và git-diff ngày 06/11/2026, chạy fixture với Git 2.54.0. Mọi thao tác ghi chỉ nằm trong repository tạm do ví dụ tạo, không đổi repository công việc, không fetch hoặc push. Demo không có submodule, symlink hay đổi tên chỉ khác chữ hoa chữ thường.

Nhìn lại hai nơi chứa nội dung

Sau git mv, working tree có đường dẫn mới và index cũng đã được cập nhật cho việc đổi tên. Nếu tiếp tục sửa file mới, working tree đi trước index. Lúc ấy bạn cần xem cả diff thường lẫn diff cached để biết commit sắp chứa phần nào.

Đừng coi chữ R trong status là bằng chứng mọi nội dung mới đã được stage. Đó là thông tin về thay đổi được nhận diện; hãy đọc patch hoặc nội dung trực tiếp trong index khi cần xác nhận một dòng cụ thể.

1. Tạo và đổi tên trong repository riêng

Chạy đoạn Bash sau. Dấu ngoặc tròn giữ việc cd trong một subshell, không đổi thư mục shell 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 'title=old\nmode=demo\n' > draft.txt
  git add -- draft.txt
  git -c commit.gpgsign=false commit -qm 'Initial demo file'

  git mv -- draft.txt article.txt
  git diff --cached --find-renames=100% --name-status
  printf 'title=new\nmode=demo\n' > article.txt
  git show :article.txt
  git diff -- article.txt
  git status --short
)

Dòng đầu là đường dẫn repository tạm. Trước lần sửa nội dung, diff cached với ngưỡng rename chính xác phải nhận diện draft.txt chuyển thành article.txt với nội dung không đổi. Sau lần sửa, git show đọc từ index vẫn phải thấy title=old, còn diff thường phải thể hiện title=new ở working tree.

Giữ đường dẫn thư mục tạm để kiểm tra tiếp. Không chép riêng các lệnh tạo hoặc ghi đè file vào repository đang làm việc nếu bạn chỉ muốn thử ví dụ.

2. Stage phần nội dung mới rồi đọc lại

Mở shell ở đúng repository tạm vừa in, chạy nhóm lệnh sau:

git add -- article.txt
git show :article.txt
git diff -- article.txt
git diff --cached --find-renames --summary
git diff --cached --find-renames

Lúc này nội dung index phải có title=new và diff thường cho article.txt phải trống vì working tree đã khớp index. Diff cached vẫn cần được đọc để biết commit tiếp theo chứa cả thay đổi đường dẫn và nội dung nào.

Bài không tạo commit thứ hai: mục tiêu là quan sát ảnh sắp commit. Nhờ vậy có thể đối chiếu HEAD cũ, index và file trên đĩa mà không phải hoàn tác một commit thử.

Rename trong báo cáo diff là kết quả nhận diện

git diff có cơ chế nhận diện cặp xóa và thêm tương tự nhau. –find-renames cho phép đặt ngưỡng độ giống; 100% trong bước đầu giúp kiểm tra riêng ca chỉ đổi tên. Sau khi nội dung bị sửa, mức giống có thể giảm và cách báo cáo có thể đổi theo dữ liệu, option và cấu hình.

Vì thế đừng viết test yêu cầu mọi lần đổi tên kèm viết lại toàn bộ nội dung đều phải hiện R100. Kiểm tra đường dẫn cũ không còn trong index, đường dẫn mới có đúng blob cần ghi và patch chứa các thay đổi dự kiến. Tên gọi rename trong giao diện không thay thế việc kiểm tra nội dung.

Lỗi thường gặp và phạm vi thử nghiệm

Nếu đích đã tồn tại, dừng để đọc trạng thái trước khi dùng option force. -f có thể cho phép ghi đè đích; nó không nên là bước mặc định chỉ vì lệnh đầu thất bại. Có thể dùng dry-run để xem thao tác dự kiến, nhưng vẫn cần kiểm tra diff sau thao tác thật.

Đổi tên file cũng không tự sửa import, đường dẫn cấu hình hay tham chiếu trong tài liệu. Sau khi stage đúng nội dung, chạy kiểm tra phù hợp với project để tìm các tham chiếu cũ. Fixture chỉ chứng minh trạng thái Git của hai file text, chưa chứng minh chương trình vẫn build sau một lần đổi tên thật.

Giữ một quy trình ngắn: đổi tên, sửa nội dung, đọc diff thường và cached, stage phần còn thiếu rồi đọc patch lần cuối. Cách này giúp bạn biết rõ commit sắp lưu cả tên mới lẫn nội dung mới nào.

Nguồn tham khảo

  • Git: git-mv cập nhật index
  • Git: diff cached và nhận diện rename

Tags: GitRenameStaging
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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

Git diff A..B và A…B: so hai snapshot hay phần nhánh B thay đổi?

by Suong Nguyen
07/11/2026
0

Tạo hai nhánh cùng tiến lên để thấy vì sao diff hai đầu nhánh có thể chứa thay đổi chỉ xuất hiện ở main.

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

by Suong Nguyen
05/11/2026
0

So sánh add -u và add -A trên một repository tạm có đủ file sửa, file xóa và file mới chưa được theo dõi.

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ì.

Next Post
Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

Softmax: trừ max logit trước khi tính exp để tránh overflow

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 FlatList hai cột: numColumns không tạo layout masonry
  • JavaScript Set với object: cùng id vẫn có thể là hai phần tử
  • Android elapsedRealtime và uptimeMillis: thời gian máy ngủ có được tính khô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