Như đã nói khác, bạn có thể sử dụng stash
hoặc checkout --merge
. Tuy nhiên, tùy chọn đó sẽ gây ra thay đổi về dấu thời gian của một số tệp. Nếu bạn đang làm việc trên một dự án lớn nơi biên dịch có thể mất một thời gian dài (dự án hiện tại của chúng tôi mất nửa giờ để biên dịch với các bản dựng được phân phối), điều này có thể không tối ưu.
Trong trường hợp này, bạn có thể sử dụng kho lưu trữ khác để di chuyển cam kết đến đúng nhánh. Trước tiên, bạn sẽ cần phải sao chép kho hiện tại của bạn (điều này cần phải được thực hiện một lần duy nhất):
$ git clone /path/to/repository repository.clone
$ cd repository.clone
$ git remote add origin repository.clone
$ git fetch origin
Sau đó, trong kho hiện tại của bạn, bạn cam kết thay đổi của bạn:
$ cd /path/to/repository
$ git add path/to/modified/files
$ git commit -m 'Commit message'
Trên kho khác , bạn lấy mới cam kết, và di chuyển nó đến chi nhánh chính xác:
$ cd ../repository.clone
$ git fetch origin
$ git checkout correct-branch
$ git reset --hard origin/correct-branch
$ git cherry-pick origin/current-branch
$ # resolve conflicts if any, commit with -c option in this case
$ git push origin correct-branch:correct-branch
Sau đó trên kho lưu trữ ban đầu, bạn loại bỏ tạm thời cam kết, và loại bỏ các thay đổi liên quan (trừ khi bạn muốn k eep chúng trong cả hai nhánh).
$ cd /path/to/repository
$ git reset HEAD^
$ # edit file and remove modifications moved to other branch
Điều này phức tạp hơn và liên quan đến quá trình viết lại lịch sử, nhưng khi dự án của bạn thực sự lớn và thời gian biên dịch là yếu tố hạn chế. Lưu ý rằng bạn có thể tái sử dụng kho lưu trữ nhân bản, vì vậy không cần phải xóa/tạo lại nó mỗi lần (nếu thời gian biên dịch dài, thì kho lưu trữ có thể lớn, và nhân bản nó có thể mất chút thời gian).
Ngọt ngào. Bạn chỉ cần đảm bảo các thay đổi của bạn được tổ chức. Hoạt động hoàn hảo. – helios
rất bóng bẩy, chắc chắn có thứ gì đó làm cho việc thực hiện dễ dàng – Martin