Git Handbook
03 · Branch & Merge
Tạo nhánh, chuyển nhánh, merge, fast-forward, conflict resolution và detached HEAD.
1. Branch là một reference nhẹ
Branch không phải bản copy nguyên repository. Nó là một reference có thể di chuyển khi commit mới được tạo trên branch đó.
A---B---C main
D---E feature/logingit-branch
Liệt kê, tạo, đổi tên hoặc xóa branch.
git branch
git branch -vv
git branch feature/login
git branch -m feature/auth
git branch -d feature/login
git branch -D feature/login-d bảo vệ branch chưa merge; -D force delete.2. Chuyển branch
git-switch
Chuyển branch hoặc tạo branch mới rồi chuyển sang.
git switch main
git switch -c feature/login
git switch -3. Merge
git-merge
Tích hợp lịch sử của branch/commit khác vào branch hiện tại.
git switch main
git merge feature/login
git merge --no-ff feature/payment
git merge --ff-only origin/mainFast-forward
Trước:
A---B main
C---D feature
Sau fast-forward:
A---B---C---D main, featureMerge commit
A---B---C------M main
\ /
D---E---F feature4. Merge conflict
Conflict xảy ra khi Git không thể tự quyết định kết quả cho một số phần thay đổi.
<<<<<<< HEAD
const mode = "production";
=======
const mode = "staging";
>>>>>>> feature/config- Mở file conflict và quyết định nội dung cuối.
- Xóa conflict markers.
git add <file>để đánh dấu đã resolve.git commithoặc tiếp tục operation đang chạy.
git status
# sửa file
git add src/config.js
git commitNếu muốn hủy merge đang dở:
git merge --abort.5. Detached HEAD
Khi checkout/switch trực tiếp một commit thay vì branch, HEAD không còn trỏ tới branch. Bạn có thể xem/test lịch sử, nhưng commit mới có nguy cơ khó tìm nếu không tạo branch.
git switch --detach HEAD~3
# test something
git switch -c experiment/save-work