Tôi đang hợp tác làm việc với một dự án với một người nào đó, vì vậy chúng tôi quyết định sử dụng git. Thật không may, chúng tôi thường xuyên viết mã ở những nơi không có internet, vì vậy chúng tôi kết thúc với một cái gì đó như thế này:Tại sao Git tạo một cam kết hợp nhất mà không có thay đổi tập tin?
origin/master: A---B---C
\
mylocalmaster: D---E---F
\
hismaster: G---H---I
Bây giờ, nói rằng ông đẩy cam kết của mình và nhận được này:
origin/master: A---B---C---G---H---I
\
master (local): D---E---F
Tất cả tôi muốn làm là đẩy cam kết của tôi để có được điều này trong cả hai repo địa phương của tôi và trực tuyến một:
A---B---C---D---E---F---G---H---I
dường như với hoạt động khi tôi làm git push
, nhưng những rắc rối nảy sinh khi tôi làm git fetch
và sau đó git merge
. Tất cả những gì tôi đang cố gắng làm là lấy của anh ấy cam kết vào repo địa phương của tôi, nhưng tôi kết thúc với một cam kết hợp nhất nói một cái gì đó như Merge remote-tracking branch 'origin/master'
như thông điệp của nó.
Tôi không muốn có cam kết vô nghĩa này vì có không có mã xung đột trong cam kết của chúng tôi. Chúng tôi đang làm việc trên các tệp hoàn toàn khác nhau, vì vậy không có lý do gì để có cam kết này. Làm thế nào tôi có thể ngăn chặn git tạo ra cam kết hợp nhất này?
Khi bạn thực hiện một cú đẩy git trong tình huống đó, bạn sẽ gặp phải lỗi. Nó dường như không hoạt động tốt. – bames53
Vì tôi đến trang này cố gắng tìm hiểu cách * force * git tạo một commit hợp nhất mà không có bất kỳ thay đổi nào, tôi sẽ đề cập đến câu trả lời đó là lệnh 'git commit-tree'. Xem 'man git-commit-tree'. – Wildcard
@Wildcard Ngoài sự tò mò, trong trường hợp nào bạn muốn tạo một cam kết hợp nhất rằng 'git merge --no-ff' sẽ không giải quyết được? –