Giả sử tôi đã thực hiện một số cam kết và muốn chọn anh đào mà tôi chuyển sang kho lưu trữ từ xa. Làm thế nào tôi có thể làm điều đó (trong ascii: C1-> C2-> C3-> C4 và tôi muốn đẩy C2 và C4). Sẽ sắp xếp lại với rebase, resetting, push và sau đó thiết lập lại công việc? (C1-> C2-> C3-> C4 => C2-> C4-> C1-> C3 => đặt lại C4 => đẩy => đặt lại C3). Có cách nào đẹp hơn không?git: đẩy một cam kết duy nhất
Trả lời
Nếu bạn có cam kết trên một nhánh riêng, bạn có thể chọn cam kết từ nhánh tư nhân và áp dụng chúng cho chi nhánh chính thức. Tại thời điểm này, bạn có thể đẩy tất cả các cam kết của mình trên nhánh chính thức (đó là tập hợp con mà bạn đã chọn trước đó).
IIRC, do git coi cam kết hoạt động, C4 vốn có C3, do đó khái niệm "đẩy C4 chứ không phải C3" không có ý nghĩa với git (và tương tự C2 tương ứng với C1). (Xem câu trả lời cho this previous question.)
Không đúng! C4 tham khảo C3 là cha mẹ của nó, nhưng câu trả lời khác là chính xác hơn: bạn có thể chọn lựa cam kết trong lịch sử và áp dụng chúng cho các bậc cha mẹ khác nhau. –
Không phải là nó giống như C4 vốn đã áp dụng nó thay đổi cho C3 nhưng thay đổi của C4 là của riêng nó. – andho
Sử dụng 'git cherry-pick' trên' C4' để áp dụng nó cho một nhánh khác sẽ không dẫn đến 'C4' trên nhánh mới, mà là' C4'', một cam kết khác (nhưng tương tự). Nếu một người nào đó sau đó sáp nhập vào nhánh với 'C4' trên đó, các vấn đề có thể phát sinh. – Amber
Những gì bạn đang tìm kiếm:
git push origin commit-id:master
tín dụng đi vào: http://blog.dennisrobinson.name/push-only-one-commit-with-git/
Ghi chú:
- Đẩy một cam kết push tất cả các cam kết trước khi nó (như Amber nói). Phím là sắp xếp lại các cam kết của bạn (
git rebase -i
) trước tiên, vì vậy chúng là theo thứ tự bạn muốn đẩy chúng. - Chi nhánh được đề xuất + phương pháp chọn anh đào (được đề xuất bởi midtiby) cũng hoạt động, nhưng tại sao lại tạo ra các nhánh cây khi bạn không cần.
commit-id
không phải là một sha1. Để đẩy mọi thứ trước các cam kết N lần cuối , hãy sử dụng "HEAD ~ N" thay chocommit-id
.
Đây phải là câu trả lời được chấp nhận. 1 cảm ơn. –
$ git push <remote name> <commit hash>:<remote branch name>
# Example:
$ git push origin 2dc2b7e393e6b712ef103eaac81050b9693395a4:master
xin vui lòng thêm một số ý kiến với câu trả lời của bạn điều này sẽ làm cho dễ dàng để undrstnd ... –
- 1. git rebase một cam kết duy nhất
- 2. git-svn dcommiting một git cam kết duy nhất
- 3. bí danh git: Cam kết với đối số & đẩy trong một lệnh duy nhất
- 4. diff git duy nhất để hợp nhất cam kết
- 5. Xóa cam kết git chưa được đẩy
- 6. Hợp nhất Git cam kết
- 7. Loại trừ một cam kết duy nhất từ một "git diff"
- 8. Đẩy mà không cam kết
- 9. thay đổi nhận xét git về cam kết được đẩy
- 10. git push: Đẩy tất cả các cam kết ngoại trừ số cam kết cuối cùng
- 11. Git - Duy trì công việc không có cam kết
- 12. Git tìm hiểu cam kết cuối cùng tôi đã đẩy
- 13. Git cố gắng tìm nạp cam kết Null khi đẩy
- 14. Git: đẩy các cam kết đã sửa đổi
- 15. Đẩy mà không có cam kết trong Mercurial hoặc Git
- 16. Git hợp nhất và đẩy
- 17. Xấu cam kết Git
- 18. Băm cam kết nào để hoàn tác hợp nhất được đẩy bằng git-revert?
- 19. Hợp nhất một cam kết cụ thể
- 20. Git kéo cho đến khi cam kết nhất định (thẻ)
- 21. Git Cam kết sau khi hợp nhất mở VIM
- 22. Ngăn không cho git viết trống hợp nhất cam kết
- 23. Undo một đặc biệt cam kết trong Git đó là được đẩy lên Repos từ xa
- 24. git log của một bản sửa đổi duy nhất
- 25. Kéo tất cả các cam kết từ một chi nhánh, đẩy cam kết nào đó sang
- 26. làm thế nào để bạn chỉ đẩy một số cam kết git địa phương của bạn?
- 27. Làm thế nào để bạn đổi tên một cam kết Git đẩy vào GitHub?
- 28. Cam kết trong một gói git
- 29. Xem một Git cụ thể cam kết
- 30. Git cam kết từ python
Có, bạn có thể viết lại lịch sử (hoặc tạo nhánh riêng với lịch sử bắt buộc) rồi nhấn. Đây là cách duy nhất. –
Tôi cũng đang tìm kiếm cùng một vấn đề. Tài nguyên này có thể hữu ích https://miteshshah.github.io/linux/git/how-to-push-single-commit-with-git/ –