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 cherry-pick –no-commit: xem thay đổi trước khi tạo commit

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

Bạn muốn lấy thay đổi của một commit sang nhánh hiện tại nhưng cần review trước khi quyết định tạo commit mới. git cherry-pick --no-commit có thể phục vụ luồng đó. Cần hiểu rằng “không tạo commit” vẫn là thao tác ghi vào index và working tree.

Các lệnh đã được chạy bằng Git 2.54.0 trong repository tạm, với cấu hình global/system được cô lập khi kiểm tra biên tập. Tài liệu Git được đọc ngày 03/11/2026. Không chạy cherry-pick trên workspace blog, không fetch hoặc push; fixture không kiểm thử merge commit hay xung đột.

Tạo một commit sửa file trên nhánh riêng

Đoạn Bash chạy trong subshell, tạo thư mục bằng mktemp và in đường dẫn để bạn xem tiếp. Nó không xóa repository thử sau khi chạy:

(
  set -eu
  demo_dir=$(mktemp -d)
  echo "$demo_dir"
  cd "$demo_dir"
  git init -q -b main
  git config user.name 'AeDev Demo'
  git config user.email '[email protected]'
  git config commit.gpgsign false
  printf 'version one\n' > note.txt
  git add note.txt
  git -c core.hooksPath=/dev/null commit -qm 'Base note'
  base_commit=$(git rev-parse HEAD)

  git switch -qc change-note
  printf 'version two\n' > note.txt
  git add note.txt
  git -c core.hooksPath=/dev/null commit -qm 'Change note'
  change_commit=$(git rev-parse HEAD)
  git switch -q main

  git cherry-pick --no-commit "$change_commit"
  test "$(git rev-parse HEAD)" = "$base_commit"
  git status --short
  git diff --cached -- note.txt
  git diff -- note.txt
  cat note.txt
)

Fixture đã chạy thành công: HEAD vẫn bằng base commit, status có M note.txt, phần diff staged đổi version one thành version two, diff unstaged rỗng và file hiện tại chứa version two. Không có commit thứ ba được tạo trong nhánh main.

Hai biến commit trong bài là giá trị được lấy thật từ repository thử, không phải hash placeholder cần đoán. Các thiết lập tên, email, ký commit và hook chỉ áp dụng cho demo hoặc lần commit được chỉ định, không chỉnh cấu hình toàn máy.

Đọc đúng kết quả trước khi làm tiếp

Flag --no-commit, viết ngắn là -n, áp dụng thay đổi vào index và working tree. Trong fixture sạch, kết quả đã stage sẵn nên git diff thông thường không cho thấy patch; cần xem git diff --cached.

Đây không phải cách xem một commit chỉ đọc. Nếu mục tiêu chỉ là đọc patch, dùng công cụ xem lịch sử phù hợp thay vì áp dụng thay đổi. Trước khi dùng trên nhánh công việc thật, đọc status và bảo quản phần đang sửa theo workflow của nhóm.

Tài liệu cho phép index ban đầu không trùng HEAD trong chế độ này. Điều đó không có nghĩa trộn sẵn thay đổi là dễ review. Demo chủ ý bắt đầu sạch để tách rõ tác động của đúng một commit.

Quyết định commit là một bước riêng

Sau khi xem patch và chạy kiểm tra cần thiết trong project thật, bạn có thể tạo commit theo chính sách repository. Bài dừng trước bước đó để giữ rõ mục tiêu kiểm chứng HEAD chưa đổi. Không tự suy rằng cherry-pick sạch đồng nghĩa bản sửa đúng chức năng trên nhánh đích.

Commit gốc cũng không tự trở thành tổ tiên của nhánh main chỉ vì nội dung của nó đã được áp dụng vào index. Nếu sau này bạn tạo commit mới, cần phân biệt lịch sử commit với sự tương đương của một phần thay đổi.

Nếu có xung đột hoặc patch không còn phù hợp

Fixture không tạo conflict, nên không có kết quả chạy để báo về quy trình phục hồi conflict. Trên repository thật, dừng lại, đọc git status và xem Git có đang giữ trạng thái cherry-pick hay không trước khi chọn tiếp tục hoặc hủy theo tài liệu.

Đừng chạy hàng loạt lệnh reset hoặc abort chỉ vì muốn “dọn sạch” mà chưa biết chúng sẽ tác động đến phần sửa nào. Nếu áp dụng thành công với --no-commit, patch trong index vẫn cần quyết định riêng; nó không nhất thiết còn là một chuỗi cherry-pick đang chờ để abort.

Hiểu HEAD, index và working tree sau lệnh giúp bạn review có chủ đích. Dùng repository tạm để kiểm chứng trước, rồi mới đưa cách làm vào quy trình lấy bản sửa của nhóm.

Nguồn tham khảo

  • Git: cherry-pick, –no-commit và sequencer
  • Git: diff giữa index, working tree và commit

Tags: Cherry-pickCode reviewGit
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

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.

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.

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

Android INVISIBLE và GONE: ẩn nội dung có cần giữ chỗ không?

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 Text: rút gọn hai dòng và vẫn có đường đọc đầy đủ
  • Vì sao map(parseInt) biến index thành radix?
  • Android INVISIBLE và GONE: ẩn nội dung có cần giữ chỗ 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