2013-03-12 19 views
7

Tôi vẫn còn khá mới với Github, mặc dù tôi đang ở một vị trí mà tôi phải chủ động sử dụng nó.Làm thế nào đến "git pull origin master" không thực sự thay đổi các tệp trong thư mục của máy tính của tôi?

Dù sao, tôi đã sử dụng "git pull upstream master" để kéo và hợp nhất mã mới nhất cho dự án mà tôi đang làm việc. Tôi nghĩ rằng lệnh này sẽ cập nhật các tập tin thực tế trên máy tính của tôi (những người xuất hiện trong thư mục, vv), nhưng thay vào đó, không có gì xảy ra.

Chắc chắn bảng điều khiển đề cập đến nhiều thay đổi, nhưng dường như không có thay đổi nào xảy ra. Như một thử nghiệm, tôi thậm chí đã xóa tất cả mọi thứ từ một trong các tập tin và kéo lại để xem nếu điều này sẽ thay đổi, nhưng tôi nhận được "đã up-do-date".

Nếu nó giúp, tôi gõ vào git branch -v và đã nhận như sau:

* master a2e10a4 [ahead 29] git workflow experiment 

Ngoài ra, git status cho như sau:

# On branch master 
# Your branch is ahead of 'origin/master' by 29 commits. 
# 
nothing to commit (working directory clean) 

Là một lưu ý cuối cùng, chi nhánh duy nhất của tôi là bậc thầy.

Điều gì đang xảy ra và làm cách nào để tôi nhận được các thay đổi "kéo" để hiển thị trên thư mục/máy tính của tôi?

Cảm ơn bạn.

Trả lời

3

tôi nghi ngờ thầy không theo dõi upstream/master (như in here), có nghĩa là, một git pull upstream master chỉ lấy về cam kết từ upstream, nhưng không merge bất cứ điều gì.
Bạn có thể hợp nhất các thủ công đó theo cách thủ công: git merge upstream/master.

Plus, upstream không phải là origin, và master đang ở phía trước từ origin/master: không có gì để kéo ở đây, chỉ có 29 cam kết mới để đẩy nguồn gốc (mà phải là ngã ba của bạn, đó là clone của bạn từ thượng nguồn ở phía máy chủ GitHub : xem "What is the difference between origin and upstream in github").

fork and upstream

3

Lệnh bạn đã gõ là git pull upstream master. Lệnh đó tìm nạp và sau đó hợp nhất thay đổi từ thượng nguồn cho chi nhánh địa phương của bạn.

Thông báo git status cho biết mọi thứ trong luồng thượng nguồn của bạn đã được hợp nhất với tổng thể địa phương của bạn. Nhưng bạn chưa đã đẩy các thay đổi của bạn vào điều khiển từ xa. Nói cách khác, bạn đã cam kết các thay đổi của bạn đối với kho lưu trữ cục bộ, nhưng bạn chưa đẩy chúng vào điều khiển từ xa. Trong một VCS phân tán như git, commitpush không giống nhau.

Nhập git push origin master để gửi thay đổi của bạn tới điều khiển ngược dòng. Điều này sẽ giúp mọi thứ được đồng bộ hóa.

Nếu điều đó không hoạt động, bạn có thể cần phải rebase kho lưu trữ cục bộ của mình. Để khởi động lại nguồn gốc từ xa trong tác phẩm địa phương của bạn, hãy nhập git pull -r origin master. Sau đó, nhập git push origin master.

Nếu bạn không chắc mình có sẵn sàng để đẩy hay không, bạn luôn có thể chạy khô với git push origin master --dry-run và không có thay đổi nào của bạn thực sự được đẩy.

+1

Một công cụ khác mà bạn có thể thấy hữu ích trong kịch bản lệnh shell này do William Morgan biên soạn [git-wtf] (http://git-wt-commit.rubyforge.org/#git-wtf). Nó cung cấp một bản tóm tắt về cách các nhánh theo dõi của bạn liên quan đến một máy chủ từ xa. –

+1

'git pull -r origin master' làm việc cho tôi. cảm ơn –