Tôi đã có một số cam kết chưa được dọn sạch trong con của tôi trong nhánh chính của chúng tôi. Tôi đã thực hiện rebase thành một nhánh tính năng, và kết hợp thành công vài xung đột dẫn đến, nhưng tôi đã không nhận ra rằng việc rebase sẽ không để lại cho tôi trên nhánh tính năng. Nếu tôi bây giờ git kiểm tra chi nhánh tính năng, nó có lẽ sẽ ghi đè lên những thay đổi đã cam kết của tôi trong cây làm việc của tôi, để lại chúng trong một số loại limbo. Tôi có thể "git checkout -m", nhưng điều đó dường như chỉ để hợp nhất các thay đổi cục bộ không được cam kết. Làm thế nào tôi có thể nhận được vào các chi nhánh tính năng và giữ những thay đổi chưa được cam kết nhưng cam kết của tôi mà tôi hiện đang có trong chi nhánh chính (mà không đẩy họ đến chi nhánh chủ)? Tôi có nên sử dụng git rebase -onto không? Nếu vậy, tôi nên làm gì bây giờ mà tôi đã rebased mà không có -onto?cách di chuyển các thay đổi đã cam kết nhưng chưa được hủy bỏ sang chi nhánh khác?
Trả lời
Bạn có thể làm điều đó như thế này:
git checkout branch
để kiểm tra các chi nhánh tính năng.git reset --hard master
để di chuyển chi nhánh giống như cam kếtmaster
ngay bây giờ. Bằng cách này, bạn mất tất cả các cam kết trong nhánh. Bởi vì rebase của bạn, tất cả những cam kết nên có bản sao trênmaster
, vì vậy bạn không nên thực sự mất bất cứ điều gì.git checkout master
để thanh toánmaster
.git reset --hard origin/master
để đặt lạimaster
về trạng thái trênorigin
repo. Điều này giả định bạn không có bất kỳ thay đổi nào chưa được sửa đổi thànhmaster
. Nếu bạn làm như vậy, hãy thay thếorigin/master
bằng id cam kết bạn muốn đặt lại.
"bạn mất tất cả các cam kết trong chi nhánh ..." Tôi không làm theo phần này. Mục tiêu của tôi là giữ cho các cam kết chưa được dọn dẹp của tôi bằng cách di chuyển chúng đến nhánh tính năng. "điều này giả định bạn không có bất kỳ thay đổi chưa được sửa nào để làm chủ". Một lần nữa, cam kết không được tẩy rửa là toàn bộ lý do tại sao tôi hỏi câu hỏi của tôi. – BrianHoltz
Tôi thấy rằng wat tôi muốn làm được mô tả trong trang git-reset man dưới "Hoàn tác một cam kết, biến nó trở thành một nhánh chủ đề". – BrianHoltz
Trang git man được BrianHoltz đề cập ở đây: http://git-scm.com/docs/git-reset/2.0.0#_examples –
Trước hết hãy hạn chế tình huống của bạn để đảm bảo tôi đã hiểu chính xác. Bạn đã thực hiện một vài cam kết trên master
và muốn di chuyển chúng đến feature
, vì vậy bạn đã chạy git rebase feature
? Trước tiên, bạn muốn hoàn tác điều đó. Giả sử bạn vẫn có master
đã đăng xuất và chưa thực hiện bất kỳ lần rebases nào kể từ đó, hãy chạy git reset --hard ORIG_HEAD
để hoàn tác quá trình rebase.
Bây giờ, để có cách thích hợp để chuyển các cam kết của bạn sang chi nhánh feature
. Thực hiện và kiểm một chi nhánh tạm thời, do đó bạn không gây rối lên master
:
git checkout -b temp
Bây giờ rebase tất cả các thay đổi được thực kể từ khi cam kết cuối cùng trên origin/master
vào feature
:
git rebase --onto feature origin/master
Đó di chuyển các chi nhánh temp
như nếu nó được phân nhánh từ feature
. Bây giờ để trộn các thay đổi vào feature
, làm:
git checkout feature
git merge temp
git branch -d temp
Nó sẽ là một nhanh về phía trước hợp nhất kể từ khi bạn chỉ rebased.
- 1. Di chuyển các cam kết từ một chi nhánh này sang một chi nhánh khác
- 2. git - di chuyển nhánh "thẻ" sang cam kết khác?
- 3. Chuyển đổi chi nhánh sau khi hủy bỏ các thay đổi hiện tại trong git
- 4. Trên chi nhánh địa phương, không muốn thực hiện thay đổi, nhưng cần phải chuyển sang một chi nhánh khác
- 5. Cam kết thay đổi đối với một chi nhánh khác với chi nhánh hiện tại đã kiểm tra với subversion
- 6. Thay đổi di chuyển bằng Mercurial đến chi nhánh mới
- 7. cách cam kết thay đổi chi nhánh mới
- 8. Mercurial/hg - hủy bỏ: hợp nhất chưa được cam kết
- 9. Làm cách nào để di chuyển các thay đổi từ một chi nhánh sang một nhánh khác?
- 10. Chuyển các thay đổi từ chi nhánh này sang chi nhánh khác mà không cần hợp nhất
- 11. Git: di chuyển các cam kết từ chủ này đến chi nhánh khác
- 12. Cam kết thay đổi cho nhiều chi nhánh trong Git
- 13. Làm thế nào để di chuyển tất cả các cam kết từ một chi nhánh khác?
- 14. Kéo tất cả các cam kết từ một chi nhánh, đẩy cam kết nào đó sang
- 15. Git - Chi nhánh chuyển đổi (cửa sổ) và các thay đổi không được sửa đổi
- 16. TFS đặt giá trị di chuyển từ một chi nhánh này sang một chi nhánh khác
- 17. cách cam kết với chi nhánh svn khác nhau mà không cần chuyển đổi
- 18. hg: Cam kết một số thay đổi đối với một chi nhánh khác
- 19. Thay đổi điểm chi nhánh
- 20. Hg gần như đã cam kết sai chi nhánh
- 21. thực hiện các thay đổi không được cam kết trên chi nhánh sai cho chi nhánh bên phải
- 22. Git-Repo tìm kiếm chuỗi trong tất cả các tệp đã cam kết (chi nhánh chưa biết và cam kết)
- 23. git: Cam kết công việc hiện tại chưa được cam kết trong nhánh hiện tại đến chi nhánh mới
- 24. Sử dụng git, làm cách nào để bạn di chuyển một số thay đổi không được cam kết từ một chi nhánh sang một chi nhánh khác trong một thư mục khác?
- 25. Git: Cách di chuyển thay đổi kể từ lần commit cuối cùng đến chi nhánh mới
- 26. sáp nhập các sửa đổi đã chọn từ một chi nhánh này sang chi nhánh khác trong Mercurial
- 27. Hợp nhất các thay đổi không được cam kết vào một số chi nhánh khác bằng SVN
- 28. TFS: gửi các thay đổi được thực hiện cục bộ trong một chi nhánh đến một chi nhánh khác
- 29. Cam kết thay đổi cục bộ sau khi chi nhánh được tái hòa nhập
- 30. Chuyển sang nhánh khác mà không thay đổi các tệp vùng làm việc
Không phải là bản dupe. Đó là một vấn đề rất khác với những thay đổi đã được cam kết, chưa kể đến đã trải qua một sự tái phạm không chính xác. –