2012-08-01 34 views
8

Một đồng nghiệp đã tạo một nhánh địa phương ('branchA') từ master, đã thực hiện một số công việc, đẩy nó, sáp nhập vào master, làm thêm một số công việc và đẩy nó lại. Đồng thời, các đồng nghiệp khác đã làm việc trên các chi nhánh khác và sáp nhập họ để làm chủ.git: Cách xem cam kết với một nhánh đơn

Bây giờ tôi cần phải kéo branchA để xem xét nó. Vì vậy, tôi đã thực hiện một số git pullgit checkout -b branchA origin/branchA. Nhưng tất cả các lệnh (git diff/log/show) hiển thị các cam kết được thực hiện trên tất cả các nhánh trong repo.

Làm cách nào tôi có thể xem sự khác biệt của tất cả các cam kết được thực hiện đối với branchA so với phiên bản chính mà nó được tạo từ?

Ngoài ra làm cách nào tôi có thể git diff branchA so với HEAD hiện tại chính, nhưng chỉ xem các tệp đã thay đổi trong branchA?

Trả lời

10

Sau đây áp dụng cho câu hỏi của bạn thứ hai, làm thế nào để tìm thấy sự khác biệt giữa branchA và địa phương của bạn Phiên bản hiện tại của master. Bạn muốn sử dụng cú pháp 'chấm đôi' với git log để xem tất cả các cam kết trong branchA không nằm trong số master. Để wit:

git log master..branchA 

mỗi trang git log người đàn ông:

SYNOPSIS 
    git log [<options>] [<since>..<until>] [[--] <path>...] 
    ... 
    <since>..<until> 
    Show only commits between the named two commits. When either <since> or <until> is omitted, it defaults to HEAD, i.e. the tip of the current branch. 
    For a more complete list of ways to spell <since> and <until>, see gitrevisions(7). 

Nếu bạn muốn xem các cam kết trong cả hai master hoặc branchA, nhưng không phải trong cả hai, bạn có thể sử dụng 'ba chấm' cú pháp:

git log master...branchA 

Cuối cùng, bạn có thể sử dụng cú pháp chính xác cùng với git diff, cụ thể là, git diff master..branchAgit diff master...branchA, respectivel y.

Là một sang một bên, nếu bạn đã kiểm tra branchA, bạn thậm chí không cần phải chỉ định nó là <until>. Git sẽ giả HEAD nếu nó còn lại chưa được xác định, vì vậy hai bộ các lệnh tương đương:

git checkout branchA 
git log master.. 

git log master..branchA 
0

bạn có thể sử dụng git log --branches = mybranch

này sẽ chỉ cho log về chi nhánh cụ thể

+0

Điều này không hiệu quả. Có lẽ bởi vì tôi đã sát nhập vào master, nhưng tôi thấy những thay đổi được thực hiện bởi những người khác. – user1491250

0

Git cam kết không lưu giữ thông tin về "mà chi nhánh" họ đã cam kết trên. Họ chỉ cung cấp cho bạn một điểm trong cây bạn có thể đi bộ trở lại. Khi hợp nhất xảy ra, bạn không có cách nào, từ một cam kết hợp nhất, để quyết định cha mẹ nào đến từ nhánh bạn đã bắt đầu. Điều này được thảo luận trong một số chi tiết over here.

Đây là hiểu biết của tôi. Tôi rất muốn được sửa chữa nếu tôi sai.

2
  1. git diff master..brnachA: sẽ so sánh tất cả các tệp đã sửa đổi giữa HEAD của master và branchA.
  2. git diff master...brnachA: sẽ so sánh branchA với phiên bản chính mà nó được tạo từ đó.

FYI: git diff sẽ tạo đầu ra trong dòng lệnh. Nếu bạn muốn xem đầu ra trong một số công cụ trực quan, hãy sử dụng git difftool.

Bạn cũng có thể vượt qua tất cả các đối số và tùy chọn git diff cũng như git difftool.

+0

-2- không ổn. Nó sẽ trả về các commit trong 'master' hoặc' branchA' nhưng không trả về cả hai. Nếu 'master' nâng cao 50 commit, nhưng' branchA' đã được hợp nhất hoàn toàn, nó sẽ trả về 50 commit trong master. Điều đó không so sánh 'branchA' so với cơ sở hợp nhất của nó trong master, mà dường như là câu hỏi đầu tiên? – Christopher

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