Câu hỏi Hiển thị tệp nào đã thay đổi giữa hai bản sửa đổi


Tôi muốn hợp nhất hai chi nhánh đã được tách ra trong một thời gian và muốn biết những tập tin đã được sửa đổi.

Đã qua liên kết này: http://linux.yyz.us/git-howto.html đó là khá hữu ích.

Các công cụ để so sánh các chi nhánh tôi đã gặp phải là:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

Đã tự hỏi nếu có một cái gì đó như "git status master..branch" để chỉ xem những tệp khác nhau giữa hai nhánh.

Nếu không tạo công cụ mới, tôi nghĩ đây là gần nhất bạn có thể làm điều đó ngay bây giờ (tất nhiên sẽ hiển thị lặp lại nếu tệp đã được sửa đổi nhiều lần):

  • git diff master..branch | grep "^diff"

Đã tự hỏi nếu có điều gì đó tôi đã bỏ lỡ ...


1789
2018-05-05 00:47


gốc


Có bao nhiêu người khác tìm thấy tiêu đề của câu hỏi này gây hiểu lầm? Nó thực sự là về việc tìm kiếm sự khác biệt giữa hai nhánh. Những gì tôi tìm thấy ở đây là làm thế nào để thấy sự khác biệt giữa hai phiên bản trên cùng một nhánh. Hay tôi là người duy nhất? - Sandeepan Nath
@SandeepanNath: với git không có sự khác biệt. Bạn LUÔN LUÔN đề cập đến các cam kết cá nhân. - Samuel O'Malley
@ SamuelO'Malley Tôi mới đến git và xem xét các chiến lược phân nhánh dường như phổ biến trong đó tất cả các chi nhánh cuối cùng được sáp nhập vào các chi nhánh chủ và cuối cùng là chủ được tung ra. Bây giờ, xem xét sự kiện giới thiệu, nơi sản xuất đã ở chế độ chủ, nhưng sau đầu (bằng một bản sửa đổi nếu lần giới thiệu cuối cùng xảy ra sau lần hợp nhất cuối cùng), tôi muốn thấy sự khác biệt giữa hai bản sửa đổi này, tìm hiểu những gì sẽ được triển khai. Tôi không muốn nhìn vào nhánh cây được sáp nhập lần cuối. Đúng nếu tôi đã sai lầm. - Sandeepan Nath
@SandeepanNath: thay vì sử dụng tên chi nhánh thì bạn có thể lấy câu trả lời bên dưới và chỉ cần chỉ định ID cam kết thay thế. Hoặc thậm chí tham khảo các cam kết theo tên thẻ của họ nếu bạn tạo thẻ khi triển khai. - Samuel O'Malley
@SandeepanNath Bạn không thể so sánh 2 nhánh, bạn phải chỉ định bản sửa đổi. Vì vậy, so sánh 2 chi nhánh là so sánh 2 phiên bản. - Bastien Vandamme


Các câu trả lời:


Để so sánh nhánh hiện tại với master

$ git diff --name-status master

Để so sánh bất kỳ cặp chi nhánh nào

$ git diff --name-status firstbranch..yourBranchName

Điều đó sẽ làm những gì bạn cần, nếu tôi hiểu bạn một cách chính xác.


2187
2018-05-05 01:04



1, đôi khi - chỉ tên cũng tiện dụng - Pat Notz
@ user446936 - bạn có thể xem các chữ cái có ý nghĩa gì trong trang người dùng git status @ kernel.org/pub/software/scm/git/docs/git-status.html - đặc biệt, M == đã sửa đổi, D == đã xóa - James Manning
git diff master..blabla -- đưa cho tôi fatal: bad revision 'master..blabla'. git diff master blabla -- đưa cho tôi fatal: bad revision 'master'. Bất kỳ ý tưởng gì là sai? CẬP NHẬT: repo này không có một chi nhánh có tên là master, doh! - akostadinov
git diff --name-status your_branch...master xuất ra các thay đổi đã xảy ra trên trang cái vì your_branch được tạo từ nó - Radu
Đây là một liên kết đến nhiều tùy chọn hơn khi sử dụng git diff. git-scm.com/docs/git-diff - akvallejos


Thử

$ git diff --stat --color master..branchName

Điều này sẽ cung cấp cho bạn thêm thông tin về từng thay đổi, trong khi vẫn sử dụng cùng một số dòng.

Bạn cũng có thể lật các nhánh để có được bức tranh rõ ràng hơn về sự khác biệt nếu bạn đã hợp nhất theo cách khác:

$ git diff --stat --color branchName..master

354
2018-02-09 19:38



Nếu bạn có (được khuyến khích, imho) git color bật (config --global color.ui true), bạn có thể bỏ qua --color. (Tôi có lks - hội chứng bàn phím lười biếng.) - Art Swri
Tôi với bạn về màu sắc! BTW tôi muốn nói git config --global color.ui true - để hoàn thành. - Art Swri
Không hoạt động, ném lỗi: fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree. - Tomáš Zato
@ TomášZato xin lỗi nhưng bạn cần trao đổi "branchName" với tên chi nhánh của bạn. - Gerry


Cũng nên nhớ rằng git có phân nhánh rẻ và dễ dàng. Nếu tôi nghĩ rằng một hợp nhất có thể là vấn đề tôi tạo ra một chi nhánh cho việc hợp nhất. Do đó, nếu master có những thay đổi tôi muốn hợp nhất và ba là chi nhánh của tôi cần mã từ chủ tôi có thể làm như sau:

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

Kết quả cuối cùng là tôi đã thử hợp nhất trên một nhánh ném đi trước khi vặn với nhánh của tôi. Nếu tôi bị rối loạn, tôi có thể xóa ba-merge và bắt đầu lại.


145
2017-10-11 01:22



Tuyệt vời. Tôi chưa bao giờ nghĩ đến việc phân nhánh theo cách đó. Tôi nghĩ rằng điều này nên được coi là một phần của "thực tiễn tốt nhất" khi hợp nhất. - egelev
Khi bạn hợp nhất ba-marge lại thành ba, không phải là có khả năng phải sửa chữa các xung đột một lần nữa? - Josef.B
Không, bạn đã giải quyết chúng rồi. - Eric Anderson
@EricAnderson Phải, đó là biểu đồ. SVN gậy như kẹo cao su dưới bàn học. cám ơn. - Josef.B


Nếu có ai đó đang cố gắng tạo một tệp khác từ hai nhánh:

git diff master..otherbranch > myDiffFile.diff

45
2018-04-03 14:01



Điều này đã có ích đặc biệt là với các chi nhánh lớn có chứa rất nhiều sự khác biệt. - vandsh


Lưu ý rằng git làm cho nó dễ dàng chỉ cần thử hợp nhất và quay trở lại từ bất kỳ vấn đề nếu bạn không thích kết quả. Nó có thể được dễ dàng hơn so với tìm kiếm các vấn đề tiềm năng trước.


30
2018-05-05 00:59



David, đó là một điểm tốt, mặc dù nó sẽ được tốt đẹp để chỉ biết những gì đang xảy ra trước khi bàn tay ... - johannix


Ngoài ra còn có một phương pháp dựa trên GUI.

Bạn có thể dùng gitk.

  1. Chạy:

    $ gitk --all
    
  2. Nhấp chuột phải vào một cam kết của một chi nhánh và chọn Đánh dấu cam kết này trong menu bật lên.

  3. Nhấp chuột phải vào cam kết của một chi nhánh khác và chọn Khác biệt này -> cam kết được đánh dấu hoặc là Khác biệt được đánh dấu là cam kết -> điều này.

Sau đó sẽ có một danh sách các tập tin thay đổi trong bảng điều khiển phía dưới bên phải và các chi tiết khác trong bảng điều khiển phía dưới bên trái.


29
2018-06-14 06:01



@Orwellophile Tôi tải lên video để chỉ cách làm. Tôi hy vọng nó sẽ giúp bạn. - Shawn Xie
Wow, chỉ cho tôi, tôi cảm thấy đặc biệt. Tôi đã đánh dấu nó trong delicious.com để tham khảo trong tương lai và thêm google-foo. - Orwellophile


Một tùy chọn khác, sử dụng meld trong trường hợp này:

git difftool -d master otherbranch

Điều này cho phép không chỉ để thấy sự khác biệt giữa các tập tin, mà còn cung cấp một cách dễ dàng để trỏ và nhấp vào một tập tin cụ thể.


26
2018-04-24 13:23



Có thể muốn đặt meld làm difftool mặc định: git config --global diff.tool meld - bwv549
Đây là yêu thích của tôi bởi vì nó sẽ sử dụng bất kỳ difftool bạn cấu hình. - Josiah
Không được hỗ trợ trên OSX. :-( - Mike S.
@MikeS. vui lòng thanh toán câu trả lời này stackoverflow.com/a/12815806/151918nó chứa hướng dẫn cho OSX. Nó làm việc cho tôi ít nhất, hy vọng nó sẽ giúp. - rsilva4


Khi làm việc cộng tác, hoặc trên nhiều tính năng cùng một lúc, điều phổ biến là thượng nguồn hoặc thậm chí thầy của bạn có chứa tác phẩm không được bao gồm trong chi nhánh của bạn và sẽ xuất hiện không chính xác trong các khác biệt cơ bản.

Nếu Upstream của bạn có thể đã di chuyển, bạn nên làm điều này:

git fetch
git diff origin/master...

Chỉ cần sử dụng git diff master có thể bao gồm hoặc không bao gồm các thay đổi có liên quan.


14
2018-03-24 03:21