Câu hỏi Làm cách nào để chỉ liệt kê các tên tệp đã thay đổi giữa hai lần commit?


Tôi có một loạt các cam kết trong repo. Tôi muốn xem danh sách các tệp được thay đổi giữa hai lần commit - từ SHA1 sang SHA2.

Tôi nên sử dụng lệnh nào?


1478
2017-10-12 01:48


gốc


Đối với một cam kết và phụ huynh của nó: stackoverflow.com/questions/424071/… - Ciro Santilli 新疆改造中心 六四事件 法轮功


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


git diff --name-only SHA1 SHA2

nơi bạn chỉ cần bao gồm đủ SHA để xác định các cam kết. Bạn cũng có thể làm, ví dụ

git diff --name-only HEAD~10 HEAD~5

để thấy sự khác biệt giữa lần commit thứ mười mới nhất và lần commit thứ năm mới nhất (hoặc hơn).


2011
2017-10-12 01:51



Điều này làm việc cho git hiển thị là tốt. git show --name-only SHA1. - August Lilleaas
đặc biệt hữu ích khi nhận danh sách cam kết cho luồng công việc GIT + CVS - shiva
git diff --name-status [TAG|SHA1] cũng cho thấy các hoạt động đã được thực hiện cho các tệp - reconbot
bạn cũng có thể làm: git diff - name-only HEAD @ {3} HEAD @ {0} cho các cam kết chính xác mà bạn muốn so sánh. - b01
@AugustLilleaas thực sự sử dụng chương trình sẽ chỉ hiển thị 2 cam kết cụ thể, nếu bạn có cam kết giữa những 2 họ sẽ bị bỏ qua - chrisan


git diff --name-status [SHA1 [SHA2]]

giống như --name-only, ngoại trừ bạn nhận được một tiền tố đơn giản cho bạn biết điều gì đã xảy ra với tệp (đã sửa đổi, đã xóa, đã thêm ...)

git log --name-status --oneline [SHA1..SHA2]

tương tự, nhưng các cam kết được liệt kê sau thông điệp cam kết, vì vậy bạn có thể thấy khi nào một tệp đã được thay đổi.

  • nếu bạn quan tâm đến những gì đã xảy ra với một số tệp / thư mục nhất định, bạn có thể thêm -- <filename> [<filename>...] đến git log phiên bản.

  • nếu bạn muốn xem điều gì đã xảy ra với một cam kết đơn lẻ, hãy gọi nó là SHA1, sau đó thực hiện
    git log --name-status --oneline [SHA1^..SHA1]

Cờ trạng thái tệp:
M đã sửa đổi - Tệp đã được sửa đổi
C copy-edit - Tệp đã được sao chép và sửa đổi
R đổi tên - chỉnh sửa - Tệp đã được đổi tên và sửa đổi
Một tệp bổ sung đã được thêm
Đã xóa - Tệp đã bị xóa
U unmerged - Tệp có xung đột sau khi hợp nhất


342
2017-07-26 09:26



Tôi tình cờ nói git diff --name-status và nó đã cung cấp cho 'tập tin được thêm vào'. - aartist
Đối với git log, nó cần phải có hai dấu chấm giữa các SHA, như SHA1..SHA2 và SHA thứ hai không phải là tùy chọn, vì vậy nó sẽ giống như sau: git log --name-status --oneline [SHA1 .. SHA2] - twasbrillig
Có cách nào để loại trừ một số tệp nhất định / một số loại tệp nhất định không? - aug
Các --relative[=<path>] tùy chọn có thể giúp bạn, tôi không chắc chắn. Nếu không thì luôn có | erep -v '(.tmp|.foo|.dontwant)$' ... - artfulrobot


Nhưng để xem các tập tin đã thay đổi giữa nhánh của bạn và tổ tiên chung của nó với một nhánh khác (nói origin / master):

git diff --name-only `git merge-base origin/master HEAD`

42
2018-03-20 17:10



Điều này thực sự hữu ích! Tôi ước tôi có thể nói một cách đơn giản git diffstatus masterhoặc tương tự, kích hoạt ở trên. - oma
Hoặc là git show --pretty=format: --name-only origin/master... - sschuberth
Bạn có thể không thể biến nó thành một bí danh git, nhưng bạn có thể đặt nó vào .bashrc của bạn. - Fred
Hoặc thậm chí đơn giản hơn: git diff --name-only HEAD...master (lưu ý ba dấu chấm). Để có giải thích chi tiết, hãy xem đây. - ostrokach
Có vẻ như câu trả lời chính xác là đúng! Đơn giản git diff --name-only master..branch không tương ứng với danh sách PR github. Bằng cách này chính xác hơn. Nhưng dù sao tôi có 173 tập tin chaned so với 171 trong github PR. (không có merge-base Tôi có 228 so với 171) - x'ES


Có vẻ như không ai đề cập đến công tắc --stat:

$ git diff --stat HEAD~5 HEAD
 .../java/org/apache/calcite/rex/RexSimplify.java   | 50 +++++++++++++++++-----
 .../apache/calcite/sql/fun/SqlTrimFunction.java    |  2 +-
 .../apache/calcite/sql2rel/SqlToRelConverter.java  | 16 +++++++
 .../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
 .../org/apache/calcite/test/RexProgramTest.java    | 24 +++++++++++
 .../apache/calcite/test/SqlToRelConverterTest.java |  8 ++++
 .../apache/calcite/test/SqlToRelConverterTest.xml  | 15 +++++++
 pom.xml                                            |  2 +-
 .../apache/calcite/adapter/spark/SparkRules.java   |  7 +--
 9 files changed, 117 insertions(+), 26 deletions(-)

Cũng có --numstat

$ git diff --numstat HEAD~5 HEAD
40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1       1       pom.xml
4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

--shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)

27
2017-10-19 21:50



Câu trả lời được chấp nhận là chính xác, nhưng điều này cực kỳ hữu ích và cung cấp cho bạn thêm một chút thông tin. Cảm ơn! - kontur
Đồng ý đây là một câu trả lời hữu ích hơn vì nó chứa các số liệu thống kê khác. - internetross


Để bổ sung câu trả lời của @ artfulrobot, nếu bạn muốn hiển thị các tệp đã thay đổi giữa hai nhánh:

git diff --name-status mybranch..myotherbranch

Hãy cẩn thận trên ưu tiên. Nếu bạn đặt nhánh mới hơn trước thì nó sẽ hiển thị các tập tin bị xóa thay vì được thêm vào.

Thêm một grep có thể tinh chỉnh thêm những thứ sau:

git diff --name-status mybranch..myotherbranch | grep "A\t"

Sau đó, nó sẽ chỉ hiển thị các tệp được thêm vào myotherbranch.


17
2017-10-22 10:42



Regexes là tốt đẹp một thực sự có thể làm gần như bất cứ điều gì. Trong trường hợp này, mặc dù, cũng có --diff-filter cung cấp chức năng này một cách tự nhiên, có nghĩa là ít cơ hội có kết quả không chính xác hơn (ví dụ: các kết quả sai) - Jasper


Thêm bí danh dưới đây vào ~/.bash_profile, sau đó chạy, source ~/.bash_profile; bây giờ bất cứ lúc nào bạn cần xem các tập tin cập nhật trong lần commit cuối cùng, chạy, showfiles từ kho lưu trữ git của bạn.

alias showfiles='git show --pretty="format:" --name-only'

8
2018-04-10 19:38



Hoặc là git config --global alias.showfiles 'show --pretty="format:" --name-only' để làm cho git showfiles. - cgmb


Điều này sẽ hiển thị các thay đổi trong tệp:

git diff --word-diff SHA1 SHA2

7
2017-12-04 15:10