2010-01-19 48 views
43

Tôi hiện đang ở nhánh 'foo'. Tôi chỉ chạy git merge master. Chỉ có vấn đề là có một tập tin nào đó trong foo mà tôi muốn giữ lại. Có cách nào để lấy lại nhưng giữ tất cả các thay đổi khác từ tổng hợp chính không?git khôi phục một tệp đã bị xóa trong khi hợp nhất

+0

'git merge' sẽ không nén một tệp trừ khi nó không thay đổi trong cây đang hoạt động và có sự thay đổi để đưa vào từ nhánh khác. Để rõ ràng, việc hợp nhất có hoàn tất thành công và bạn muốn phiên bản cũ từ chi nhánh của bạn hay đã thực hiện việc hợp nhất tạo xung đột và bạn muốn phiên bản được giải quyết trông giống như phiên bản trước của chi nhánh của bạn? –

+0

Có, hợp nhất đã thành công. Tôi muốn phiên bản cũ của tệp. – tybro0103

Trả lời

46

Hãy thử một cái gì đó như thế này:

git checkout HEAD -- filename 

này sẽ lăn một fileback bạn cam kết. Nếu bạn muốn quay trở lại xa hơn với một cam kết cụ thể, bạn có thể sử dụng băm cam kết hoặc thêm^N vào cuối từ khóa HEAD, ví dụ: HEAD^2.

+3

Hoặc nếu hợp nhất chưa hoàn thành (do xung đột), chỉ cần git checkout filename. – paxos1977

+4

@ceretullis: nếu đó là do xung đột trong tệp được đề cập, bạn sẽ cần 'git checkout --ours filename'. –

+0

Tôi thực sự đã kết thúc tìm kiếm ở nơi khác nhưng sử dụng một băm cam kết thay vì HEAD^1 ... cảm ơn! – tybro0103

0

Tôi không chắc chắn cách khắc phục sự cố từ tình huống hiện tại, nhưng bạn có thể muốn xem git merge -s ours. Tài liệu là here.

Một workflow sẽ

  1. Tạo chi nhánh a từ master
  2. Thực hiện thay đổi tùy chỉnh trong chi nhánh a rằng bạn sẽ không muốn hợp lại thành master
  3. Check-out mastergit merge -s ours a
  4. Hãy xem a và tiếp tục làm việc và cam kết.

Bây giờ khi bạn hợp nhất với bản gốc, các thay đổi tùy chỉnh trong bước 2 sẽ bị bỏ qua.

+0

Các tài liệu ở đây không còn nữa, thật đáng buồn. ;) – poige

Các vấn đề liên quan