thảo luận Cần 500ae giúp đỡ về Git

  • Người tạo chủ đề Người tạo chủ đề loservoz999
  • Ngày bắt đầu Ngày bắt đầu

loservoz999

Member
Dự án mình đang làm có branch dev và 1 branch feature checkout từ dev phát triển độc lập từ 2022 rồi. Khi checkout, họ đã xóa nhiều file trong branch feature sau đó tiếp tục phát triển độc lập trên nhánh đó. Trên dev cũng vẫn tiếp tục phát triển trên các file bị xóa . Giờ sau 1 năm yêu cầu merge vào dev nhưng khi merge thì các file đã bị xóa ở feature cũng sẽ bị mất ở dev. Có cách nào khi merge mà vẫn giữ được các file đó trên dev không ae.
 
Bản chất là do có 1 cái commit ở branch feature đã xoá các file đó rồi, nên khi merge 2 branch vào thì đương nhiên cái commit đó sẽ được apply làm mất các file đó đi.

Cách đơn giản và thủ công nhất là copy các file đó ra thư mục ngoài, merge 2 branch, r copy tay lại. Cách này ngu vl nhưng hiệu quả :haha:

Cách thứ 2 là làm 1 cái commit mới ở branch feature để add lại các file ở branch dev vào r sau đó mới merge:shame:

Các cách còn lại tôi chưa nghĩ ra. Hóng tiếp các cao nhân vào trả lời.
 
Bản chất là do có 1 cái commit ở branch feature đã xoá các file đó rồi, nên khi merge 2 branch vào thì đương nhiên cái commit đó sẽ được apply làm mất các file đó đi.

Cách đơn giản và thủ công nhất là copy các file đó ra thư mục ngoài, merge 2 branch, r copy tay lại. Cách này ngu vl nhưng hiệu quả :haha:

Cách thứ 2 là làm 1 cái commit mới ở branch feature để add lại các file ở branch dev vào r sau đó mới merge:shame:

Các cách còn lại tôi chưa nghĩ ra. Hóng tiếp các cao nhân vào trả lời.
Thôi chết t rồi, Nhiều file lắm fence, cả 1 năm lận, toàn bọn trc làm tôi kéo list file có chữ D nó dài vl dài, kể ra nó nằm trong 1 thư mục thì cũng dc, đây dm mỗi thư mục đổi vài file xóa vài file:ah:
 
Dễ mà, pull nhánh dev về nhánh feature, và chấp nhận xử lý những file conflict nếu có.

Cái này mình làm suốt. Đợt trc mới merge 2,3 nhánh cách nhau cả năm, thêm xoá sửa cả hàng trăm, nghìn files.

Vì 1 nhánh thì vẫn phát triển tính năng mới, còn 1 nhánh thì refactor toàn bộ code cũ.

Đã có git thì ko có gì có thể mất được hết, chỉ sợ ko có git thôi.
 
Bước 1: tạo 1 branch mới từ branch feature, gọi là brach A
Bước 2: merge branch dev vô branch A, giải quyết hết conflicts
Bước 3: merge brach A vô lại branch dev

Khó nhất là mấy cái conflicts ở bước số 2 thôi
 
sao lại tach riêng nhánh mà làm tận 1 năm cơ à, thế thì nhiều thay đổi lắm nhỉ, quả này merge to đầu.
 
Trước có sờ vào 1 cái legacy system, từ năm 2000 thì phải. Mỗi lần deploy prod lại phải cherry pick hài vãi. Cơ bản là do prod branch out of date với branch dev rồi nên thế.

Merge conflic ko khó bằng việc kiểm tra correctness sau khi merge. Deploy lên dev rồi test lại hệ thống 1 chút thì có vẻ an toàn hơn
 
phải tạo 1 branch tmp để merge cái branch mất file làm base code, sau đó đắp cái branch có file vô lại branch tmp để nó add files vô lại, đó là idea của mình. còn của chatgpt,
Mã:
Trường hợp bạn đang mô tả có vẻ như các file đã bị xóa trong nhánh feature không được phát triển hoặc giữ lại trên nhánh dev trong suốt 1 năm qua. Khi bạn merge nhánh feature vào nhánh dev, các file đã bị xóa sẽ bị mất trên nhánh dev.
Tuy nhiên, tùy thuộc vào hệ thống quản lý phiên bản bạn đang sử dụng, có một số phương pháp giúp bạn giữ các file đã bị xóa trên nhánh feature khi merge vào nhánh dev. Dưới đây là một số gợi ý:
Sử dụng lệnh merge tham số "--no-ff" và "--no-commit": Khi thực hiện merge, sử dụng các tham số này để tạo một commit mới trên nhánh dev. Sau đó, bạn có thể chỉnh sửa commit này để khôi phục các file đã bị xóa từ nhánh feature trước khi hoàn tất quá trình merge.
Sử dụng cherry-pick: Thay vì merge toàn bộ nhánh feature vào nhánh dev, bạn có thể sử dụng cherry-pick để chọn lựa từng commit cụ thể từ nhánh feature và áp dụng chúng lên nhánh dev. Bằng cách này, bạn có thể chọn lựa chỉ các commit không liên quan đến việc xóa file để merge, và tránh việc mất mát các file đã bị xóa.
Sử dụng công cụ hỗ trợ merge thông minh: Một số công cụ quản lý phiên bản như Git và Mercurial cung cấp các công cụ hỗ trợ merge thông minh, cho phép bạn giữ các thay đổi xóa file trong một nhánh nhất định khi merge vào nhánh khác. Ví dụ, Git có thể sử dụng "git rerere" để lưu trữ các giải pháp merge trước đó và áp dụng chúng trong quá trình merge tương lai.
Lưu ý rằng việc giữ lại các file đã bị xóa trong quá trình merge có thể gây ra xung đột hoặc không nhất quán giữa các thay đổi trên nhánh feature và nhánh dev. Đảm bảo rằng bạn đã kiểm tra kỹ các thay đổi và xem xét các tác động tiềm năng trước khi quyết định giữ lại các file đã bị xóa trong quá trình merge.
 
Fix conflict ko khó, cái khó là sau khi fix xong chạy có bị bug hay ko
uxby0Nl.gif
 
@TuM4~Y thần đồng git vô support bạn kìa
Đừng xoá nữa là được 🐧

Dự án mình đang làm có branch dev và 1 branch feature checkout từ dev phát triển độc lập từ 2022 rồi. Khi checkout, họ đã xóa nhiều file trong branch feature sau đó tiếp tục phát triển độc lập trên nhánh đó. Trên dev cũng vẫn tiếp tục phát triển trên các file bị xóa . Giờ sau 1 năm yêu cầu merge vào dev nhưng khi merge thì các file đã bị xóa ở feature cũng sẽ bị mất ở dev. Có cách nào khi merge mà vẫn giữ được các file đó trên dev không ae.
Bác có thể từ branch dev checkout ra 1 branch dev-tmp, sau đó check lại những file đã xoá, để ra ngoài project tạm.
Sau đó bác dùng gitignore ignore hết mấy file ko cần xoá đi để git ko tracking nữa, rồi merge lại vào master, xong cop vào master để được ko :smile:. Sợ dễ bị ăn chửi, với cách này nếu các file ko cần xoá nếu có update trong tương lai thì lại phải bỏ ra khỏi gitignore.
 
Có một cách nhé, giả sử feature bắt đầu rẽ nhánh từ dev ở commit C0, và feature branch trên local đang latest sync với feature trên origin

git co C0
git reset —soft feature

Discard change toàn bộ staged modified/deleted files đi, chỉ giữ lại added files. Vẫn giữ added files trên staged commit:

git stash save
git co feature
git stash pop

Sau đoạn này thì ko nhớ là đám file trong stash đã tự động staged hay chưa, nếu chưa thì bạn add vô staged commit hết nhé, rồi commit vào feature thôi. Có thể push lên origin cho đỡ phải làm lại

git commit -m “Add deleted files from dev”
git push origin feature (optional)

Bước cuối cùng, và khó nhất:
git merge dev - Resolve conflict :byebye:
 
Sửa lần cuối:
pull từ nhánh dev về và tạo nhánh con từ nhánh dev, sau đó merge nhánh con này vô nhánh feature -> conflict -> xử conflict rồi lấy nhánh mới này merge lại vào dev, quan trọng là fix conflict lồi trĩ luôn vì phải check kỹ, không biết có đúng không xin nhận chỉ dạy từ các cao nhân
ucheJZL.gif
 

Thống kê chủ đề

Ngày tạo
loservoz999,
Người trả lời cuối
nhoxbinhduongvn,
Trả lời
14
Lượt xem
1.980
Quay lại
Lên đầu trang