2013-04-26 31 views
110

Tôi đang làm việc trên một nhánh Git có một số kiểm tra bị hỏng và tôi muốn kéo (hợp nhất các thay đổi, không chỉ ghi đè) các thử nghiệm này từ một chi nhánh khác nơi chúng đã được sửa.Có thể kéo chỉ một tệp trong Git không?

Tôi biết tôi có thể làm

git pull origin that_other_branch 

nhưng điều này sẽ cố gắng kết hợp nhiều file khác, cho rằng tôi chưa sẵn sàng.

Chỉ có thể kéo và hợp nhất tệp được chỉ định (chứ không phải mọi thứ) từ một nhánh khác?

Đây không phải là bản sao của Git pull request for just one file vì tất cả câu trả lời cho câu hỏi đó là cách hoàn nguyên tệp đã thay đổi cục bộ thành phiên bản kho lưu trữ mà không thay đổi bất kỳ nhánh nào.

Trả lời

99

Bạn có thể lấy và sau đó kiểm tra chỉ có một tập tin theo cách này:

git fetch 
git checkout -m <revision> <yourfilepath> 
git add <yourfilepath> 
git commit 

Về git checkout lệnh: <revision> - một tên chi nhánh, tức là origin/master <yourfilepath> không bao gồm tên kho (mà bạn có thể nhận được từ việc nhấp vào nút copy path trên trang tệp trên GitHub), tức là README.md

+19

Mã băm được yêu cầu bởi -m chuyển đổi có thể được in bằng git branch -v. Tuyệt vời! – h22

+2

Tuyệt vời. Điều này đã giúp tôi nhiều hơn một lần. Để làm rõ, cờ -m có vẻ hài lòng với băm của cam kết mà từ đó bạn muốn kéo tệp đơn của mình. – rd108

+1

Điều này cũng phù hợp với tôi. Mặc dù, tôi chạy git log trên nhánh từ xa của mình để tìm sự đảo ngược: ví dụ: $ git log remotes/origin/master – Dan

190

Đây là phương pháp dễ dàng hơn một chút mà tôi đã đưa ra khi nghiên cứu vấn đề này:

git fetch {remote} 
git checkout FETCH_HEAD -- {file} 
+2

Đây là câu trả lời đúng – Picrasma

+2

gây tử vong: tham chiếu không hợp lệ: FETCH_HEAD –