Mới đây tôi nhận task deploy một dự án từ nhánh develop lên nhánh production. Lúc merge có tới hơn 2000 files conflict. Rất may sau khi kiểm tra và confirm lại với dev trước thì chỉ có file trong thư mục App là cần merge thủ công, còn lại các thư mục khác chỉ cần override code từ nhánh develop sang.

Git merge conflict by folder 1

Trạng thái hiện tại:

  1. Tôi dùng kết gợp GitKraken và Command
  2. Tôi đang ở nhánh production và đã CD vào thư mục project
  3. Merge branch ‘develop’ into ‘production’ dùng GitKraken

Tiến hành Override code trong các thư mục Other từ nhánh develop sang production:

$ git diff --name-only --diff-filter=U ./Other1/ | xargs git checkout --theirs
// ./Other1/ là path của thư mục con cần merge
// vì nhánh hiện tại là production và ta merge develop sang, cho nên:
// --theirs trong trường hợp này là develop branch
// --yours trong trường hợp này là production branch

$ git add -A ./Other1/
// Hiện tại GitKraken vẫn báo thư mục Other1 có confict, nhưng thực chất
// là đã override code từ develop rồi nên ta add vào staged files luôn

Lặp lại 2 command trên với các thư mục khác, còn thư mục App thì ta merge thủ công bằng tool của GitKraken.

Vấn đề gặp phải:

Ở trong các thư mục Other có những file tồn tại ở nhánh production nhưng bị xóa ở nhánh develop khiến câu lệnh git checkout --theirs bị lỗi. Cách giải quyết là dùng lệnh git rm với những file đó.

0 0 vote
Article Rating