Giống như những người khác đã trả lời, với Git, bạn không nên quan tâm đến mã chưa hoàn thành trong các chi nhánh cá nhân của mình. Tuy nhiên, nếu vì một lý do nào đó, bạn thực sự thực sự không muốn công việc còn dang dở của mình chạm vào repo chính, bạn có thể sử dụng bản chất phân tán của Git!
Có một công cụ đơn giản có tên git bundle
giúp bạn dễ dàng vượt qua các thay đổi xung quanh mà không cần kho lưu trữ trung tâm. Đầu tiên, sao chép repo:
git clone https://github.com/octocat/Spoon-Knife.git working_copy_1
cd working_copy_1
thực hiện một số thay đổi và cam kết chúng với một nhánh tạm thời:
git checkout -b tmp_branch
git commit -a -m "temporary changes"
Bây giờ, gói chúng thay đổi:
git bundle create ../tmp.bundle tmp_branch
Bây giờ bạn có một tệp bó bạn có thể gửi thư đến máy mới của bạn. Làm thế nào để bạn sử dụng nó ở đó? Hãy tạo một bản sao làm việc mới:
cd ..
git clone https://github.com/octocat/Spoon-Knife.git working_copy_2
cd working_copy_2
chúng ta cần coi gói của chúng ta như một điều khiển từ xa khác, vì vậy chúng ta có thể tìm nạp các thay đổi từ nó
git remote add tmp ../tmp.bundle
git fetch tmp
vì toàn bộ vấn đề là chuyển các thay đổi mà không để lại dấu vết, chúng tôi sẽ muốn nén chúng vào bản sao làm việc để mất cam kết tạm thời:
git merge tmp/tmp_branch --squash
và tất cả những gì còn lại là loại bỏ điều khiển từ xa tạm thời:
git remote remove tmp
VIola! Các thay đổi đã được chuyển sang bản sao làm việc mới mà không để lại dấu vết của cả chi nhánh và cam kết!
Nhưng thực sự - quá trình này khá dài và cồng kềnh. Đây là Git, không phải SVN - thực sự không nên có bất kỳ lý do nào để không đẩy chi nhánh cá nhân của bạn đến repo trung tâm.