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 diff A..B và A…B: so hai snapshot hay phần nhánh B thay đổi?

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

Bạn mở diff giữa main và feature rồi thấy một file chỉ được thêm trên main lại hiện như bị xóa. Nhánh feature có thể chưa hề xóa file ấy: bạn đang so hai snapshot khác nhau. Dùng ba dấu chấm chuyển điểm đầu so sánh về tổ tiên chung để xem phần nhánh thứ hai mang vào.

Bài đối chiếu tài liệu git-diff ngày 07/11/2026 và chạy bằng Git 2.54.0. Mọi commit và nhánh đều được tạo trong repository tạm. Không đổi repository công việc, không fetch hoặc push; demo không có merge phức tạp hay nhiều merge base.

Chốt hai đầu của phép so sánh

git diff A..B tương đương so snapshot A với snapshot B. git diff A...B so merge base của A và B với B. Với cú pháp ba chấm, vị trí nhánh thứ hai có ý nghĩa: đảo A và B có thể trả phần thay đổi khác.

Đây là ngữ nghĩa của git diff. Không chuyển nguyên cách hiểu này sang mọi lệnh Git chỉ vì chúng cũng dùng dấu chấm; mỗi lệnh có thể diễn giải revision notation theo mục đích khác.

1. Tạo hai nhánh có thay đổi riêng

Chạy nguyên khối Bash sau. Dấu ngoặc tròn giữ việc cd trong subshell:

(
  set -eu
  demo_dir=$(mktemp -d)
  printf '%s\n' "$demo_dir"
  cd "$demo_dir"
  git init -q -b main
  git config user.name 'AeDev Demo'
  git config user.email '[email protected]'
  printf 'shared\n' > common.txt
  git add -- common.txt
  git -c commit.gpgsign=false commit -qm 'Base'

  git switch -q -c feature
  printf 'feature work\n' > feature-only.txt
  git add -- feature-only.txt
  git -c commit.gpgsign=false commit -qm 'Feature work'

  git switch -q main
  printf 'main work\n' > main-only.txt
  git add -- main-only.txt
  git -c commit.gpgsign=false commit -qm 'Main work'

  git diff --name-status main..feature
  git diff --name-status main...feature
)

Giữ đường dẫn thư mục tạm ở dòng đầu để kiểm tra tiếp. Phép hai chấm phải có A cho feature-only.txt và D cho main-only.txt. Phép ba chấm chỉ có A cho feature-only.txt trong fixture này.

Chữ D của phép so hai snapshot nói rằng file có ở đầu main nhưng không có ở đầu feature. Nó không tự chứng minh đã có một commit trên feature xóa file main-only.txt. Bảng lịch sử trong ví dụ giúp bạn tách hai cách giải thích.

2. Đảo chiều và đối chiếu merge base

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

git diff --name-status feature...main
base=$(git merge-base main feature)
git diff --name-status "$base" feature
git log --oneline --graph --all
git status --short

Khi đảo chiều ba chấm, phần được chọn là thay đổi của main từ tổ tiên chung: main-only.txt. Khi ghi rõ merge base rồi so với feature, kết quả phải khớp main…feature. Working tree vẫn sạch vì các lệnh diff và log này chỉ đọc.

Biến base ở đây chỉ là hash commit được Git trả về. Nó không đổi branch, không merge và không reset nội dung. Không cần sửa lịch sử để hiểu vì sao hai cách diff có kết quả khác nhau.

Kiểm tra trước khi dùng cho code review

Xác định nhánh đích và nhánh muốn review, rồi chọn chúng theo đúng thứ tự. Nếu dùng remote-tracking branch, nhớ tên ấy phản ánh lần cập nhật local gần nhất; bài không chạy fetch nên không chứng minh main đang khớp server của dự án.

Sau khi hiểu danh sách đường dẫn, đọc patch đầy đủ để xem nội dung thay đổi. –name-status chỉ giúp nhìn bản đồ file, không chứng minh thay đổi an toàn hoặc chương trình vẫn build.

Lỗi thường gặp và giới hạn

Đừng thay hai chấm bằng ba chấm chỉ để làm một dòng D biến mất. Trước hết xác định bạn cần so snapshot cuối cùng hay xem công việc của nhánh từ điểm tách. Cả hai câu hỏi đều hữu ích trong các tình huống khác nhau.

Demo có một tổ tiên chung đơn giản. Lịch sử đã rebase, squash hoặc có nhiều merge phức tạp cần được đọc lại theo commit thực tế; bài chưa thử những trường hợp đó. Khi báo cáo kết quả review, ghi rõ hai ref và phép so sánh đang dùng để đồng đội tái hiện đúng cùng một patch.

Nguồn tham khảo

  • Git: ngữ nghĩa hai chấm và ba chấm của diff
  • Git: merge-base

Tags: Code reviewDiffGit
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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

by Suong Nguyen
06/11/2026
0

Đổi tên file trong repository tạm rồi kiểm tra riêng rename đã stage và phần sửa nội dung còn ở working tree.

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

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