Tôi không chắc chắn làm thế nào/nếu tôi có thể dẹp những cam kết hay nhóm/squash tôi một mình?
Chỉ sử dụng các cam kết của bạn chứ không phải người khác !!
Gần đây, tôi gặp phải vấn đề tương tự, tôi đã có 41 cam kết về yêu cầu kéo của tôi, chi nhánh của tôi đã có xung đột hợp nhất và yêu cầu kéo của tôi đã cũ. Tôi đã phải đối phó với một số vấn đề mà bạn đang phải đối mặt bây giờ. Tôi sẽ chỉ chạm vào một cái gì đó tôi đã thực hiện.
one of my commits
another one of my commits
one of my commits, the first one after branching
Tôi đề nghị bí chỉ cam kết của bạn (tất cả trong số họ nếu bạn muốn).
Ví dụ: nếu bạn có 3 lần commit, bạn có thể đánh số chúng và tạo thành một lần sử dụng tính năng rebase tương tác. Xem dưới đây lệnh:
$ git rebase -i HEAD~n
Ví dụ, bạn muốn bí 3 cam kết:
$ git rebase -i HEAD~3
Bây giờ, bạn sẽ thấy một giao diện rebase tương tác, nơi bạn có thể viết xây dựng lại và/pick on đầu tiên cam kết và bí trên phần còn lại của họ. Vui lòng xem video này để hiểu rõ hơn.
Squashing commits
merge commit
someone else's commit
another merge commit
another person's commit
rebase để khác (người khác) cam kết
Đây là vấn đề thường gặp tất cả mọi người phải đối mặt khi sử dụng git. Hãy tưởng tượng bạn đang làm việc trên repo địa phương của bạn. Sau khi làm việc một lúc, bạn đã thực hiện một số cam kết, bây giờ bạn muốn đẩy chúng vào kho lưu trữ từ xa ban đầu. Tuyệt, bạn đã thực hiện điều này git push
có nội dung là merge commit
vấn đề.
Bạn biết ai đó khác có thể cũng đã cam kết với cùng một repo từ xa được cập nhật ngay bây giờ. Vì repo cục bộ của bạn không được cập nhật lên bộ điều khiển từ xa, có merge commit problem
. Bây giờ, nếu chúng ta xóa vấn đề này thì sao? Chúng tôi có thể cập nhật repo của máy cục bộ của bạn về bản gốc từ xa của bạn không? Có thể không?
Có, bạn có thể làm điều đó bằng cách rebasing. Làm sao?
Khi bạn làm:
git pull --rebase
gì đang xảy ra ở đây? Git sẽ tua lại (lùi lại) tất cả các cam kết cục bộ của bạn, kéo các cam kết từ xa rồi phát lại các cam kết cục bộ của bạn trên đầu các cam kết từ xa mới được kéo. Nếu có bất kỳ xung đột nào phát sinh mà git không thể xử lý, bạn sẽ có cơ hội hợp nhất các cam kết thủ công sau đó chỉ cần chạy git rebase --continue
để tiếp tục phát lại các cam kết cục bộ của bạn.
Xem này blog post để biết thêm chi tiết
Nếu bạn muốn kết hợp chi nhánh của bạn để làm chủ?
Best (and safest) way to merge a git branch into master
là có một lý do bạn đang sử dụng rebase? – ilj
@ilj Các thành viên khác trong nhóm muốn giữ một lịch sử rõ ràng nhất có thể, vì vậy, để giữ lịch sử cam kết hợp lý. Cá nhân tôi không quan tâm đến một lịch sử trò chuyện hợp lý (không hoàn toàn nằm ngoài hàng) – jkj2000
trong kinh nghiệm của tôi, nó tạo ra nhiều vấn đề hơn là giải quyết. – ilj