2013-03-22 36 views
7

Folks,git branch đang ở phía trước xuất xứ/master trong khi repo là đồng bộ

này được một cái gì đó trong git rằng chỉ cần không có ý nghĩa với tôi, đây là những gì xảy ra

  • tôi làm một git status , Tôi thấy rằng tôi đang ở trên nhánh chủ và không có gì để cam kết và thư mục làm việc được sạch sẽ.
  • Tôi sau đó làm git pull origin master Tôi kéo một loạt mã, không có vấn đề gì.
  • Bây giờ khi tôi làm git status tôi thấy một dòng mới chi nhánh của bạn chạy nhanh xuất xứ/master bởi 1 cam kết

repo địa phương của tôi và repo từ xa là hoàn toàn đồng bộ, những gì hiện chi nhánh của bạn đang ở phía trước của nguồn gốc/chủ bởi 1 cam kết có nghĩa là, điều này rất rất khó hiểu. Bất kỳ đầu vào/phản hồi nào được đánh giá cao. Cảm ơn

+1

Tại sao bạn cho rằng kho lưu trữ của mình được đồng bộ hóa với điều khiển từ xa? –

+0

Bạn không phải rebasing theo mặc định trong pull của bạn phải không? Bạn có thể thử tìm nạp và hợp nhất riêng thay vì kéo không? –

+0

Bạn có thể sử dụng "gitk". để xem commit nào có nhãn "master" và "origin/master" được đính kèm. –

Trả lời

9

tôi đã trải qua chính xác những gì bạn nhìn thấy. tôi không thể tìm ra lời giải thích hợp trên git-scm.com nhưng tôi tin rằng nó là một cái gì đó như thế này:

  1. tôi sao chép một repo từ nguồn gốc, cho phép nói nguồn gốc có thạc sĩ và tôi có thầy bây giờ trong tôi địa phương repo
  2. bây giờ xuất xứ và repo của bạn có một tham chiếu đến cam kết cuối cùng. Tham chiếu này là chi nhánh chủ VÀ tham chiếu là như nhau trong repo địa phương của bạn và trên nguồn gốc
  3. Hãy nói rằng một người nào đó (khác sau đó bạn) đẩy cam kết mới để làm chủ nguồn gốc
  4. bạn git pull origin master
  5. bây giờ bạn làm git status và bạn sẽ thấy rằng chi nhánh của bạn đang đi trước nguồn gốc/chủ thậm chí khó khăn bạn không có cam kết mới trong repo địa phương của bạn và không có gì để đẩy !! (Trong ví dụ này, bạn đã không cam kết bất cứ điều gì mới ở địa phương kể từ bước 1 (cloning))

==> để sửa lỗi này bằng cách thực hiện một git pull origin khi tôi đang trên tổng thể.

A git pull origin master sẽ kéo tất cả các cam kết mới từ chi nhánh xuất xứ đến chi nhánh địa phương của bạn.

A git pull origin cũng sẽ đặt lại tham chiếu của bạn thành chính bằng cam kết trong đó chủ được tham chiếu trên nguồn gốc !! (Khi điều này không xảy ra, git-bash sẽ chỉ nghĩ rằng bạn có rất nhiều cam kết phía trước! Bởi vì trong cây cam kết có rất nhiều cam kết được thực hiện sau khi cam kết nơi tham chiếu chính của bạn!)

Điều này làm cho bất kỳ sence cho bạn? Nó làm cho tôi :)

Cũng xin vui lòng hỗ trợ toughts của tôi một chút bằng chứng cứng/tài liệu :)

+0

, vui lòng đọc phần bình luận bên dưới câu trả lời của blunderboy. Có user1781472 nói điều gì đã giải quyết được vấn đề của anh ấy + một số nhận xét về lý do tại sao nó giải quyết được vấn đề của anh ấy. – deblendewim

4

Bạn đã thêm cam kết trên máy cục bộ của mình, máy chưa được gửi tới máy chủ từ xa.

Nếu bạn tự tin sửa đổi của bạn cần được chia sẻ với các kho lưu trữ từ xa, gửi cam kết điều khiển từ xa được thực hiện với sự git push lệnh:

git push orgin master:master 
+0

không, thats toàn bộ điểm, tôi không có bất cứ điều gì trên máy địa phương của tôi mà không phải là cam kết. – user1781472

+0

Sự khác biệt giữa ** git push origin master ** và ** git push origin master: origin/master ** – user1781472

+0

Trước hết: lỗi của tôi, comand nên đọc 'git push origin master: master' - sửa trong bài đăng. – LeGEC

0

Trên thực tế, nó là giả định của bạn mà chi nhánh địa phương của bạn và từ xa nhánh được đồng bộ. Nếu nó nói rằng chi nhánh địa phương của bạn là trước nguồn gốc/chủ bởi 1 cam kết thì chắc chắn nó được. Tất cả chúng ta đều tin tưởng GIT.

Sử dụng tính năng này để kiểm tra.

git checkout master // You move to master branch 
cat .git/HEAD //shows the commit on which HEAD is pointing to 

git checkout origin/master //you switch to origin master branch 
cat .git/HEAD 

Nếu bạn thấy HEAD đó trong tổng thể địa phương và nhánh chính từ xa đến cùng một cam kết thì cả hai đều được đồng bộ hóa.

Nếu chi nhánh địa phương của bạn là trước 1 cam kết, chỉ cần đẩy nó (nếu bạn muốn) đến chi nhánh từ xa của bạn như

git push origin master 
+1

cảm ơn cho câu trả lời, vì vậy tôi chỉ cần kiểm tra trên cả hai địa phương (git log) và từ xa trước khi đọc này và cả hai đều có cam kết gần đây. Sau đó, tôi đã làm một ** git fetch ** và bây giờ tin nhắn đó đã biến mất, điều đó nói rằng nhánh của tôi là trước bởi 1 cam kết. Có vẻ như bất cứ điều gì tôi nhận được bởi git pull git nghĩ rằng đó là cam kết của tôi mà không được đẩy và git lấy giải quyết rằng, không có ý tưởng gì đang xảy ra ở đây – user1781472

+0

1. Bạn đã đẩy cam kết của bạn xuất xứ. Nếu bạn không đẩy nó, thì cam kết của bạn không thể trôi đi. 2.Bạn đã đặt lại HEAD với tùy chọn cứng? Bởi vì điều này cũng loại bỏ cam kết từ chi nhánh của bạn. – sachinjain024

+1

@ user1781472: Trên trang web git-scm, tôi tìm thấy thông tin sau: Cập nhật các chi nhánh theo dõi từ xa: $ git fetch origin Lệnh trên sao chép tất cả các nhánh từ không gian tên/không gian tên từ xa và lưu chúng vào các tham chiếu cục bộ/remotes/origin/namespace, trừ khi nhánh. .fetch tùy chọn được sử dụng để chỉ định một refspec không mặc định. – deblendewim

1

Bạn đang không ở 100% đồng bộ với các kho lưu trữ từ xa như bạn đang nghĩ. Bạn có mọi thứ từ kho lưu trữ từ xa, vâng. Nhưng vị thầy địa phương của bạn ở phía trước nguồn gốc/chủ bởi một cam kết.

Run này, và chỉ cho chúng ta kết quả:

git log --all --graph --pretty=format:'%h %d %s' 

tôi mong đợi để xem một cái gì đó như:

* (master) Commit D 
* (origin/master) Commit C 
* Commit B 
* Commit A 

Nếu tôi đọc bài viết của bạn một cách chính xác, bạn là một cam kết trước bởi vì bạn có D trong khi nhánh từ xa ở C. Bạn sẽ phải git push để đẩy commit D lên kho lưu trữ từ xa. Sau đó, bạn sẽ được đồng bộ 100%.

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