2009-08-25 27 views
139

thể trùng lặp:
Using Git how do I find modified files between local and remoteLàm thế nào tôi có thể thấy các cam kết đến trong git?

Làm thế nào tôi có thể thấy cam kết đến trong git? Hoặc thậm chí tốt hơn, hãy xem những gì tôi chỉ git fetch/git pull ed?

Chỉnh sửa: Để làm rõ câu hỏi: ai đó nói với tôi rằng, để có một số bản sửa lỗi, tôi nên lấy từ kho lưu trữ của họ. Mục tiêu của tôi là xem những thay đổi của họ là gì trước Tôi chấp nhận chúng. git pull tự động hợp nhất, đó không phải là những gì tôi muốn. git fetch sẽ lấy chúng mà không cần sáp nhập, nhưng tôi không chắc chắn làm thế nào để xem chính xác những gì tôi vừa kéo vào. Lý do cho các phrasing ban đầu là tôi thường sử dụng Mercurial, nơi lệnh sẽ là hg incoming <repo name here> — một lệnh mà git dường như thiếu một tương tự.

Trả lời

149

incoming isn không phải là một bản đồ trực tiếp trong git bởi vì bạn có thể (và tôi thường làm) có nhiều repos bạn đang kéo từ, và mỗi repo có nhiều chi nhánh.

Nếu có một tương đương với lệnh đến hg, nó muốn có lẽ là thế này:

git fetch && git log ..origin/master 

Đó là, "đi lấy tất cả những thứ từ thượng nguồn, và sau đó so sánh chi nhánh hiện tại của tôi chống lại nhánh chủ thượng nguồn. "

Tương tự như vậy, đi sẽ là:

git fetch && git log origin/master.. 

Trong thực tế, tôi chỉ cần gõ những tay (mặc dù tôi đã tạo ra một bí danh cho một trong số họ) bởi vì nó dễ dàng để có rất nhiều chi nhánh địa phương theo dõi và trở thành được theo dõi bởi rất nhiều chi nhánh ở xa và không gặp khó khăn gì khi giữ nó lại với nhau.

+6

Ngoài ra, bạn có thể muốn sử dụng 'git diff --stat origin/master' để xem diffstat mà' git pull' hiển thị sau khi hợp nhất thành công. –

+1

Cảm ơn bạn đã trả lời câu hỏi này @Dustin! Tôi có thể hỏi, tôi không hoàn toàn hiểu được phép thuật đằng sau 'log ..origin/master' những dấu chấm có nghĩa gì? – gideon

+0

Nó không quá nhiều ma thuật, nó được hiển thị trong bản tóm tắt cho 'git log' và được mô tả như là tùy chọn thứ hai trong phần tùy chọn của [trang người đàn ông] (http://schacon.github.com/git/git-log. html) sau đó dẫn đến tài liệu [gitrevisions] (http://schacon.github.com/git/gitrevisions.html) được đưa vào chi tiết hơn. – Dustin

1

Không có điều nào như "người dùng cam kết" cam kết cục bộ và đẩy họ. Tôi sẽ mở gitx hoặc gitk (đi kèm với git) và kiểm tra những gì repos trông giống như ... Tôi nghĩ rằng sẽ cung cấp cho bạn một cái nhìn rõ ràng.

sử dụng: gitk --all để xem.

+0

Vui lòng xem câu hỏi đã làm rõ của tôi. –

+0

Ahh, tôi hiểu ý anh là gì, câu trả lời của Dustin đã chết. cảm ơn để biết thêm chi tiết. Câu hỏi –

10

Bạn có thể muốn kiểm tra sự khác biệt giữa hai kho lưu trữ. Giả định bạn có một chi nhánh địa phương 'thầy' và từ xa theo dõi chi nhánh 'nguồn gốc/master', nơi mà những người khác cam kết mã của họ, bạn có thể nhận được số liệu thống kê khác nhau về sự khác nhau của hai nhánh:

git diff --summary master origin/master 

git diff --stat master origin/master 

git diff --numstat master origin/master 

git diff --dirstat master origin/master 

git diff --shortstat master origin/master 

git diff --name-only master origin/master 

git diff master origin/master 
+1

không phải là về xem sự khác biệt, đó là về hình dung các cam kết và kéo mà người dùng đã thực hiện. –

+1

Đúng, nhưng tôi cảm thấy như thể Netzpirat đang ở gần; nếu điều này hiển thị cho tôi nhật ký thay vì khác biệt, nó sẽ hoàn hảo. –

80

Bạn cũng có thể quan tâm git whatchanged cung cấp tổng quan tốt về các thay đổi đã được thực hiện trong một số phạm vi cam kết.

Nếu bạn muốn xem lại những gì bạn đang về để kéo, làm một đầu tiên, mà chỉ cập nhật chi nhánh theo dõi cục bộ cho các kho lưu trữ từ xa (và không phải bất kỳ chi nhánh của bạn), và sau đó sử dụng bất kỳ lệnh git fetch rằng chương trình bạn những cam kết mới mà bạn sắp sửa kéo.Ví dụ:

git whatchanged ..origin 

Đây là cách viết tắt của "tổ tiên chung ở bất kỳ nơi nào tôi hiện có và nguồn gốc" qua "nguồn gốc".

+0

ahh, tôi thích điều này tốt hơn bằng cách sử dụng git log –

6

Khi ai đó yêu cầu bạn kéo, họ sẽ cung cấp cho bạn URL repo và chi nhánh (mặc định là master).

Tôi chỉ muốn làm

git fetch URL branch 

theo sau là một (trong thứ tự ưu tiên giảm dần):

# note 3 dots in next 3 commands 
gitk HEAD...FETCH_HEAD 
    # shows all commits on both sides since the "fork" point 
gitk --cherry-pick HEAD...FETCH_HEAD 
    # as above but skips identical patches so you really see the differences 
git log --graph --boundary --left-right --cherry-pick --decorate HEAD...FETCH_HEAD 
    # I have a nice alias for this; it's the text mode eqvt of the above 

tôi cũng sử dụng "tig" đôi khi, nhưng usecase cụ thể này (nhìn thấy cả mặt) không được phục vụ tốt bởi tig.

Tuy nhiên, nếu bạn mang nó xuống để hai chấm (có thể phù hợp với câu hỏi thực tế của bạn chặt chẽ hơn, mặc dù tôi vẫn thích 3 phiên bản dot), bạn có thể làm

tig HEAD..FETCH_HEAD 

Sau đây là các bí danh để thuận tiện:

incoming = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate HEAD..FETCH_HEAD' 
outgoing = !sh -c 'git fetch && git log --graph --boundary --left-right --cherry-pick --decorate FETCH_HEAD..HEAD' 
0

Hãy xem bài đăng này. Nó cho bạn thấy cách sử dụng một tính năng mới được giới thiệu trong phiên bản git 1.7 Using Git how do I find changes between local and remote

+0

Tôi tin rằng "có một cái nhìn ở đây" bài viết không phải là câu trả lời hay. Sử dụng các từ của riêng bạn, trả lời câu hỏi trên trang web này. – activedecay

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