2011-12-16 35 views
18

Tôi không chắc chắn thuật ngữ chính xác cho vấn đề này là gì. Về cơ bản, tôi cần phải loại bỏ một số tập tin & thư mục trên kho lưu trữ từ xa của tôicách xóa tệp trong kho lưu trữ từ xa?

Tôi có một git repo địa phương & repo từ xa trong github

  1. đã làm việc bản thân mình.
  2. Một người bạn đã thực hiện yêu cầu kéo.
  3. Tôi đã hợp nhất yêu cầu của anh ấy (qua giao diện github)
  4. Tôi đã kéo các thay đổi.
  5. Tôi đã thử nghiệm mã và quyết định không đưa những thay đổi của mình (không nên sáp nhập tại địa điểm đầu tiên)
  6. tôi trở lại con người một trước cam kết
  7. Thực hiện một số thay đổi
  8. Push to server.

Đây là cách kho địa phương của tôi trông giống như tại thời điểm này:

* 7e143b1 (HEAD) 
|\ 
| * 18cea0f (origin/master, origin/HEAD, master) 
| |\ 
| | * fc19ccf 
* | | 6f3c58a 
|// 
* | 8d82486 
|/ 
| * d3ce65f (pre-install-activeadmin) 
|/ 
* 7d0566c 
* d1c77ab 
* 75ba704 
* 30dc67c (heroku/master) 
* f89b1f6 
* ea5e2db 
* 08931d6 
* 9773a6f 
* b636aba 
* cb6f8d4 

tôi có thể thay đổi repo địa phương của tôi để 7d0566c. Tôi không chắc nơi đầu trên repo từ xa của tôi là chỉ đến.

Làm cách nào để xóa các tệp đó trên repo từ xa nhưng không có trên repo địa phương của tôi?

Rõ ràng, tôi không thấy bất kỳ tệp nào của anh ấy trong repo địa phương của tôi vì tôi đã đặt lại HEAD của tôi thành cam kết trước đó. Tuy nhiên, repo từ xa vẫn hiển thị các tập tin của mình. Khi tôi cam kết, nó cam kết tốt.

Luồng công việc của tôi có sai không? Tôi nên đã thử nghiệm bản vá ngay từ đầu. Bất kì lời đề nghị nào? Tôi mới vào kiểm soát phiên bản. Cảm ơn bạn

+0

Bạn không thêm/gỡ bỏ các tập tin trên một xa như github vì nó là một kho lưu trữ trần. Xem các refspecs cho github và repo cục bộ của bạn có giống nhau hay không bằng cách thực thi 'git rev-parse HEAD' và' git rev-parse origin/master' (nếu từ xa của bạn có tên là 'origin'). – fge

+0

Tôi nghĩ rằng nó sẽ giúp nếu bạn hiển thị đầu ra của 'git log --pretty =" format:% h% d "--graph --all' và giải thích từ đó. – htanata

+0

Phải. bạn không thêm/xóa tệp. Ahem. Họ khác nhau. Tôi nên khắc phục sự cố này như thế nào?Cảm ơn – dvliman

Trả lời

37

Kéo các thay đổi từ máy chủ, sau đó thực hiện git rm trên repo cục bộ của bạn, cam kết thay đổi và đẩy tới máy chủ. Các tệp sẽ bị xóa.

+0

có cách nào dễ dàng để xóa những tệp này khỏi repo địa phương của tôi không? nói có hàng trăm tệp? Cảm ơn – dvliman

+0

@limaoit: Tôi không phải là chuyên gia Git, vì vậy có thể là cách tốt hơn, nhưng đơn giản là sao chép thư mục ở nơi khác, kéo từ máy chủ để cập nhật, sau đó xóa mọi thứ trong repo ngoại trừ '.git', di chuyển mọi thứ (trừ' .git') từ bản sao lưu của bạn sang repo, commit và push. – Ryan

+0

Bạn có thể sử dụng trình bao để xóa tệp. Điều đó có nghĩa là bạn có thể sử dụng một kịch bản lệnh shell, tìm, tập tin globbing, hoặc bất kỳ kỹ thuật loại bỏ khối lượng nào bạn muốn. Khi bạn hoàn tất, hãy chạy "git add -A". từ thư mục cấp cao nhất. Cờ -A sẽ báo cho git biết các tệp bạn đã xóa. – wadesworld

1

Tôi giả định 18cea0f là nơi hợp nhất yêu cầu kéo của bạn xảy ra. Để trở lại mà hợp nhất, bạn có thể làm:

git revert -m 1 18cea0f 

Bạn có thể đọc thêm ở đây: http://progit.org/2010/03/02/undoing-merges.html

+1

Tôi đã làm điều đó. Repo địa phương của tôi được hoàn nguyên thành công. Không có vấn đề ở đó. Các repo từ xa là một trong những nguyên nhân gây ra vấn đề. Nó chứa các tập tin từ fc19ccf .etc ... – dvliman

+0

@limanoit Bạn chỉ cần đẩy các thay đổi của bạn vào repo từ xa: 'git push origin master'. – htanata

+0

@htnata Vâng tôi đã làm điều đó. Đó là lý do tại sao tôi hỏi câu hỏi này. Repo địa phương của tôi không chứa, nói tập A, B, C. Nhưng repo từ xa của tôi chứa tập tin A, B, C đó là hiệu ứng của việc sáp nhập trước đó. Tôi thực sự khắc phục sự cố này bằng cách lặp lại repo. Xóa tệp theo cách thủ công. và đẩy cam kết. Điều này là khá hacky. Tự hỏi nếu có một giải pháp tốt hơn cho vấn đề này. – dvliman

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