Tạo một bản sao của một branch

Tạo một bản sao của một branch

27.09.2024
Author: ADMIN

Tất nhiên! Việc tạo một bản sao chính xác của một branch là một tác vụ khá đơn giản trong Git. Đây là cách bạn có thể tạo một branch mới có tên develop-backup từ branch develop hiện tại:

  1. Đảm bảo rằng bạn có phiên bản mới nhất của repository:
git fetch --all
  1. Tạo branch mới develop-backup từ develop:
git branch develop-backup develop

Hoặc, nếu bạn muốn chuyển sang branch mới ngay lập tức:

git checkout -b develop-backup develop
  1. Đẩy branch mới lên remote repository (nếu cần):
git push -u origin develop-backup

Đây là quy trình đầy đủ:

# Đảm bảo bạn có phiên bản mới nhất của repository
git fetch --all

# Tạo branch mới develop-backup từ develop
git branch develop-backup develop

# Kiểm tra các branch
git branch -a

# Nếu bạn muốn chuyển sang branch mới
git checkout develop-backup

# Đẩy branch mới lên remote repository (nếu cần)
git push -u origin develop-backup

Sau khi thực hiện các bước này, cấu trúc của repository của bạn sẽ như sau:

main <- base <- develop
main <- base <- develop-backup

Trong đó develop-backup là một bản sao chính xác của develop tại thời điểm bạn tạo nó.

Lưu ý:

  1. Branch develop-backup sẽ không tự động cập nhật khi develop thay đổi. Nó là một snapshot của develop tại thời điểm bạn tạo nó.
  2. Nếu bạn muốn develop-backup luôn được cập nhật với develop, bạn sẽ cần phải merge hoặc rebase develop vào develop-backup thường xuyên.
  3. Hãy chắc chắn rằng việc tạo và đẩy một branch mới lên remote repository phù hợp với quy trình làm việc của team bạn.

Với cách này, bạn sẽ có một bản sao chính xác của develop trong develop-backup, cho phép bạn thực hiện các thử nghiệm hoặc thay đổi mà không ảnh hưởng đến branch develop gốc.

Ví dụ về Merge và Rebase

Ví dụ về Merge và Rebase

27.09.2024
Author: ADMIN

Hôm nay, DevEliteBlog sẽ cung cấp cho bạn một số ví dụ về merge rebase, từ cơ bản đến nâng cao. Chúng ta sẽ bắt đầu với các tình huống đơn giản và dần dần chuyển sang các tình huống phức tạp hơn.

Ví dụ 1: Merge cơ bản

Giả sử bạn có một branch feature và muốn merge nó vào main.

# Đang ở branch feature
git checkout main
git merge feature

# Nếu không có conflict, Git sẽ tự động tạo một merge commit

Ví dụ 2: Rebase cơ bản

Thay vì merge, bạn muốn rebase branch feature lên main để giữ lịch sử commit tuyến tính.

git checkout feature
git rebase main

# Nếu có conflicts, Git sẽ dừng lại để bạn resolve
# Sau khi resolve, tiếp tục rebase
git add .
git rebase --continue

Ví dụ 3: Merge với conflicts

Khi merge gặp conflicts, bạn cần resolve chúng thủ công.

git checkout main
git merge feature

# Git báo conflicts
# Mở các file bị conflict và resolve
git add .
git commit -m "Merge feature branch and resolve conflicts"

Ví dụ 4: Rebase tương tác

Sử dụng rebase tương tác để chỉnh sửa, gộp, hoặc xóa các commit trước khi merge.

git checkout feature
git rebase -i main

# Một editor sẽ mở ra, cho phép bạn chọn hành động cho mỗi commit
# Sau khi chỉnh sửa, lưu và đóng editor
# Git sẽ thực hiện rebase theo chỉ dẫn của bạn

Ví dụ 5: Cherry-pick

Chọn một commit cụ thể từ một branch khác để áp dụng vào branch hiện tại.

git checkout main
git cherry-pick <commit-hash>

# Nếu có conflicts, resolve chúng
git add .
git cherry-pick --continue

Ví dụ 6: Merge với squash

Gộp tất cả các commit từ feature branch thành một commit duy nhất khi merge vào main.

git checkout main
git merge --squash feature
git commit -m "Merge feature branch with all changes squashed"

Ví dụ 7: Rebase với branch phức tạp

Giả sử bạn có một branch dài hạn (long-running branch) cần được cập nhật với main.

git checkout long-running-feature
git rebase main

# Resolve conflicts cho mỗi commit
# Có thể có nhiều lần phải resolve conflicts
git add .
git rebase --continue

# Lặp lại cho đến khi rebase hoàn tất

Ví dụ 8: Merge với chiến lược tùy chỉnh

Sử dụng chiến lược merge khác nhau để kiểm soát cách các thay đổi được kết hợp.

git checkout main
git merge -X theirs feature  # Ưu tiên thay đổi từ branch feature
# hoặc
git merge -X ours feature    # Ưu tiên thay đổi từ branch hiện tại (main)

Ví dụ 9: Rebase onto

Chuyển một chuỗi commit từ một branch sang một branch khác.

# Giả sử bạn có cấu trúc: main <- base <- feature
git rebase --onto main base feature

# Điều này sẽ chuyển các commit từ base đến feature lên main

Ví dụ 10: Merge với subtree

Merge một project khác vào project hiện tại như một subdirectory.

git remote add project-b <url-to-project-b>
git fetch project-b
git checkout -b project-b-branch project-b/main
git checkout main
git merge --allow-unrelated-histories --squash -s subtree --no-commit project-b-branch
git commit -m "Merge Project B as a subdirectory"

Những ví dụ này bao gồm các tình huống từ cơ bản đến nâng cao trong việc merge và rebase code giữa các branch. Khi thực hành, hãy nhớ rằng rebase có thể thay đổi lịch sử commit, vì vậy cần cẩn thận khi sử dụng nó trên các branch đã được push lên remote repository. Luôn đảm bảo bạn hiểu rõ những gì mình đang làm và có backup nếu cần thiết.