2010-06-06 38 views
10

Tôi đang duy trì một kho lưu trữ A.git partial pull

Một cộng tác viên khác đã nhân bản vô tính A đến một kho lưu trữ khác B.

Sau đó, người đóng góp khác đã thêm tệp F, không liên quan đến tôi, vào B.

Bây giờ tôi muốn kết hợp những thay đổi trong B trở lại Một, nhưng không có cam kết F. Làm thế nào để làm như vậy?

+0

Có thể chủ đề này sẽ giúp bạn: http://www.mail-archive.com/[email protected]/msg00653.html HTH –

Trả lời

7

Lấy đầu và chọn cherry từ đó.

git remote add jessica git://jessica.com/repo.git 
git fetch jessica master 
git cherry-pick 235a5 
... 
1

Câu trả lời ngắn gọn là bạn không thể "kéo một phần" bằng git.

Tuy nhiên, bạn có thể kéo các thay đổi từ B, và sau đó sử dụng git-rebase (1) hoặc git-filter-branch (1) để sửa đổi cam kết (s) có chứa Ftrước khi đẩy để A. Lưu ý rằng điều này sẽ thay đổi (tương ứng với B) băm (các) cam kết bạn sửa đổi, vì vậy các lần hợp nhất trong tương lai đã thử trên B sẽ ít thông minh hơn bình thường.

Hãy xem the Pro Git chapter on Rewriting History.

2

bạn có thể làm:

git checkout <remote_branch> <paths> 

nơi <paths> là các tập tin mà bạn thực sự muốn. điều này là dễ nhất nếu các tập tin bạn muốn nằm trong các thư mục riêng biệt với các tệp bạn không sử dụng, vì bạn có thể sử dụng các ký tự đại diện.

cách khác, hãy thử:

git pull --squash 

này có thể là một hướng dẫn chút, như bạn thì phải đi và xóa các tập tin bạn không muốn trước khi cam kết, nhưng nó cũng là cách duy nhất để làm điều đó nếu các tệp bạn không muốn đã được thêm vào như một phần của cùng một cam kết đã thay đổi các tệp bạn làm muốn.

nhược điểm (khá lớn) là bạn mất lịch sử cam kết của nhánh từ xa.