2009-05-11 21 views
21

Tôi làm việc 100% với một chi nhánh mà tôi đã thực hiện ra khỏi chi nhánh chính. Bây giờ một đồng nghiệp đã đẩy lùi về nguồn gốc/chủ, tôi đã cố gắng đẩy những thay đổi đó vào chi nhánh cá nhân của tôi. Khi tôi thực hiện 'git checkout master' theo sau là 'git status', tôi nhận được thông tin sau:Git: làm thế nào là một chi nhánh tôi không cam kết về phía trước xuất xứ/master

# Your branch is ahead of 'origin/master' by 2 commits. 

Chi nhánh mà tôi không bao giờ cam kết trước 2 cam kết? Cách tốt nhất để tìm hiểu những gì họ cam kết và về cơ bản hoàn tác chúng? Tôi không muốn đẩy bất cứ điều gì trở lại nguồn gốc/chủ như có thể gây ra xung đột chưa biết.

+0

Đối với Git là một công cụ đơn giản, đây là phần khó hiểu nhất về nó. Tôi có cùng một vấn đề giống như bạn.Tôi chưa bao giờ cam kết với chi nhánh chính của mình. Tôi luôn luôn phân nhánh và thực hiện các thay đổi của mình. Khi tôi làm một 'git pull origin master' tôi nhận được rằng nó là 200 cam kết phía sau. Tại sao? Tôi chưa bao giờ chạm vào nó. Tôi ước họ sẽ làm rõ điều này. – Jeff

Trả lời

35

Để xem các cam kết mà bạn có trong TRỤ mà không phải là nguồn gốc/master:

git log origin/master.. 

Để thổi chúng đi và làm cho HEAD giống như nguồn gốc/master:

git reset --hard origin/master 

thế nào bạn có đẩy các thay đổi vào kho lưu trữ của riêng mình không? Tôi nhận thấy bạn đã đề cập đến "đẩy" ... Có nguồn gốc một repo trung tâm? Repo của đồng nghiệp của bạn? Tôi nghi ngờ những gì bạn thực sự muốn làm là kéo những thay đổi của đồng nghiệp của bạn, hoặc trực tiếp hoặc từ một điểm dàn trung tâm, thay vì đẩy. Nó có thể chỉ đơn giản là 2 thay đổi bạn có trước nguồn gốc/chủ thực tế là những thay đổi của đồng nghiệp của bạn, nhưng nhánh theo dõi gốc/chủ là cũ.

+0

Cảm ơn araqnid. Chỉ tò mò, git log origin/master .. làm gì trong trường hợp này? –

+3

Với lệnh git có phạm vi * của bản sửa đổi, A..B là viết tắt của "B^A" hoặc "B - not A". "A .." là viết tắt của "HEAD - not A". git tải bản sửa đổi B, sau đó quay trở lại qua biểu đồ sửa đổi, dừng lại khi gặp phải các cam kết có thể truy cập từ A (thường là chính A). Trong trường hợp lịch sử sửa đổi đơn giản mà biểu đồ chỉ là một dòng, điều này đơn giản hóa để hiển thị các cam kết sau A đến và bao gồm B. – araqnid

+0

+1 Cảm ơn bạn. <3 –

0

Bạn đã thực hiện bất kỳ số nào git rebase 'ing trên chi nhánh bạn có hoạt động không?

Nếu không, bạn có thể thử sao chép chi nhánh của mình (git checkout -b testrebase) và cấp git rebase master để xem điều đó có hiệu quả hay không. Điều này sẽ làm sáng tỏ tất cả các cam kết bạn đã thực hiện liên quan đến chủ và sau đó cố gắng áp dụng chúng trở lại (làm cho lịch sử có ý nghĩa, về cơ bản). Nếu nó không hoạt động chỉ cần xóa testrebase.

4

Bạn đang làm việc trên nhánh chi nhánh và bạn đã thực hiện hai cam kết không nằm trong số origin/master.

Thông điệp # Your branch is ahead of 'origin/master' by 2 commits. đang nói:

# Your branch 'mybranch' has two commits not in 'origin/master' 

Tưởng tượng người dùng git số sửa đổi SVN-như, bạn đang chi nhánh đã cam kết 1, 2, 3, 4, 5 - nhưng origin/master chỉ có 1, 2, 3. Vì vậy, lịch sử sửa đổi trông giống như sơ đồ ASCII crappy sau ..

your branch         -- [commit 4]--[commit 5] 
              /     /\ HEAD 
master --[commit 1]--[commit 2]--[commit 3]-/ 
             /\ origin/master 

Để hiển thị hai cam kết cuối cùng trong nhật ký, bạn có thể làm ..

git log HEAD..HEAD~2 
0

Bạn có thể cần phải chắc chắn rằng nguồn gốc của bạn/chủ được cập nhật với phiên bản tổng thể repo của bạn. Hãy thử chạy:

git fetch origin master 

vì vậy nguồn gốc/chủ của bạn giống như chủ của repo. Sau đó, khi bạn chạy

git pull origin master 

bạn sẽ nhận được hiển thị chính xác số lượng cam kết trước tổng thể địa phương của bạn. Sau đó, bạn có thể chạy araqnid's command để xem các cam kết nào khác nhau.

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