Có một loạt các cách khác nhau tùy thuộc vào khoảng cách của bạn và nhánh bạn muốn sử dụng.
Hãy mắc một sai lầm kinh điển:
$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop
Vì vậy, bây giờ bạn muốn những thay đổi này, mà bạn chưa cam kết master
, sẽ được thực hiện develop
.
Nếu bạn không có một develop
bài viết nào, phương pháp này là tầm thường:
$ git checkout -b develop
Điều này tạo ra một develop
chi nhánh mới bắt đầu từ bất cứ nơi nào bạn đang có. Bây giờ bạn có thể cam kết và các công cụ mới là tất cả trên develop
.
Bạn có một develop
. Xem nếu Git sẽ cho phép bạn chuyển đổi mà không làm gì:
$ git checkout develop
Điều này hoặc sẽ thành công, hoặc phàn nàn. Nếu nó thành công, thật tuyệt! Chỉ cần cam kết. Nếu không ( error: Your local changes to the following files would be overwritten ...
), bạn vẫn có nhiều lựa chọn.
Đơn giản nhất có lẽ là git stash
(như tất cả những người trả lời khác đánh bại tôi khi nhấp vào postnói). Chạy git stash save
hoặc git stash push
, 1 hoặc chỉ đơn giản git stash
là viết tắt của save
/ push
:
$ git stash
Điều này cam kết mã của bạn (vâng, nó thực sự thực hiện một số cam kết) bằng cách sử dụng một phương thức không phân nhánh-y kỳ lạ. Các cam kết mà nó thực hiện không phải là "trên" bất kỳ nhánh nào nhưng hiện được lưu trữ an toàn trong kho lưu trữ, vì vậy bây giờ bạn có thể chuyển đổi các nhánh, sau đó "áp dụng" stash:
$ git checkout develop
Switched to branch 'develop'
$ git stash apply
Nếu mọi việc suôn sẻ, và bạn thích kết quả, thì bạn nên git stash drop
bỏ qua. Điều này xóa tham chiếu đến các cam kết không phân nhánh-y kỳ lạ. (Chúng vẫn còn trong kho lưu trữ và đôi khi có thể được truy xuất trong trường hợp khẩn cấp, nhưng đối với hầu hết các mục đích, bạn nên xem xét chúng đã biến mất vào thời điểm đó.)
Các apply
bước thực hiện việc kết hợp với những thay đổi cất giấu, sử dụng máy móc thiết bị hợp nhất cơ bản mạnh mẽ của Git, cùng một loại điều nó sử dụng khi bạn làm hòa trộn chi nhánh. Điều này có nghĩa là bạn có thể nhận được "xung đột hợp nhất" nếu nhánh bạn đang làm việc do nhầm lẫn, đủ khác với nhánh mà bạn dự định làm việc. Vì vậy, nên kiểm tra kết quả một cách cẩn thận trước khi bạn cho rằng stash được áp dụng sạch sẽ, ngay cả khi chính Git không phát hiện ra bất kỳ xung đột hợp nhất nào.
Nhiều người sử dụng git stash pop
, đó là tay ngắn cho git stash apply && git stash drop
. Điều đó tốt cho đến nay, nhưng điều đó có nghĩa là nếu ứng dụng dẫn đến một mớ hỗn độn và bạn quyết định rằng bạn không muốn tiếp tục con đường này, bạn không thể lấy lại dễ dàng. Đó là lý do tại sao tôi khuyên bạn nên tách riêng apply
, kiểm tra kết quả, drop
chỉ khi / khi hài lòng. (Điều này tất nhiên giới thiệu một điểm khác trong đó bạn có thể nghỉ giải lao khác và quên đi những gì bạn đã làm, quay lại và làm sai , vì vậy đó không phải là một cách chữa trị hoàn hảo.)
1 Các save
trong git stash save
là động từ cũ để tạo một stash mới. Phiên bản Git 2.13 đã giới thiệu động từ mới để làm cho mọi thứ phù hợp hơn pop
và để thêm nhiều tùy chọn hơn cho lệnh tạo. Phiên bản Git 2.16 chính thức không dùng động từ cũ (mặc dù nó vẫn hoạt động trong Git 2.23, đây là phiên bản mới nhất tại thời điểm tôi đang chỉnh sửa này).
git stash
git-scm.com/book/en/Git-Tools-Stashing