2012-04-24 25 views
12

Đây là kịch bản: Tôi chia sẻ một số kho lưu trữ từ Github và sao chép nó vào một thư mục cục bộ. Tôi thực hiện một thay đổi, cam kết và đẩy nó vào kho lưu trữ của tôi. Sau đó tôi gửi yêu cầu kéo đến kho lưu trữ ban đầu, nhưng nó bị từ chối vì bất kỳ lý do gì. Kho lưu trữ ban đầu sau đó nhận được một số cam kết từ những người khác, để lại phiên bản chia tay của tôi lỗi thời. Bây giờ, làm thế nào để tôi nhận được phiên bản mới nhất của repo gốc (vào repo chia đôi của tôi và tại địa phương)? Và ngoài ra, làm cách nào để xóa lịch sử cam kết của tôi khỏi Github cho cam kết bị từ chối của tôi?Làm cách nào để lấy lại một repo Git được chia nhỏ mà không xóa và bỏ lại?

+0

thể trùng lặp của [Từ bỏ Git cam kết trên Github cho yêu cầu kéo bị từ chối] (http://stackoverflow.com/questions/9538320/abandoning-git-commits-on-github-for-rejected-pull-requests) – CharlesB

Trả lời

8

Không bao giờ thực hiện các thay đổi của riêng bạn trong nhánh chính, bạn nên tạo nhánh mới thực hiện các thay đổi và đẩy nó. Dù sao nếu bạn muốn làm cho chi nhánh của bạn tương đương với một điều khiển từ xa làm:

Giả sử bạn có thượng lưu như một điều khiển từ xa git fetch upstreamgit checkout -f -B master upstream/master

Lệnh thanh toán trên sẽ được nếu chi nhánh tổng thể là có đi trước và ghi đè lên nó với thượng nguồn/chủ nếu nó không có nó tạo ra từ thượng nguồn/chủ.

Nếu bạn không có thượng nguồn thêm vào như là một sử dụng từ xa git remote add upstream repositoryurl

EDIT: nó phải được -B

EDIT: git reset --hard upstream/master là thích hợp hơn thực

4

Giữ kho lưu trữ được chia đôi trên GitHub đồng bộ hóa là một quy trình gồm hai bước.

  1. Giữ repo địa phương của bạn đồng bộ với:

    git fetch thượng nguồn; git merge thượng nguồn/master

  2. Giữ ngã ba của bạn trên GitHub đồng bộ với repo địa phương của bạn

    git push nguồn gốc chủ

Xem GitHub Fork A Repo đối với một số lời giải thích. Bạn cần phải thiết lập 'ngược dòng' như một điều khiển từ xa đến kho lưu trữ mà bạn đã chia đôi.

Đối với 'các cam kết bị từ chối' của bạn, nếu bạn đã thực hiện chúng trên một nhánh địa phương thì bạn chỉ có thể xóa chi nhánh. Nếu nó không thuộc nhánh địa phương, thì bạn sẽ cần phải đặt lại HEAD của nhánh trở lại cam kết bạn chọn. Giống như:

# Assume you are on master and need to go back to commit BeadBabe 
git checkout -b temp 
git branch -f master BeadBabe 
git checkout master 
git branch -d temp 

Đã qua rồi.

+1

Tôi thấy điều này hơi rõ ràng hơn câu trả lời được chấp nhận. Cảm ơn lời giải thích! – Tim

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