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 cam kết mới nhất thứ mười và mới nhất thứ năm (hoặc hơn).
git show --name-only SHA1
.
git diff --name-status [TAG|SHA1]
cũng cho thấy các thao tác đã được thực hiện đối với các tệp
git diff --name-status
dường như không muốn hiển thị các tệp đã thêm. @sschuberth chỉ ra git show
, có vẻ như hoạt động đúng với tôi : git show --pretty=format: --name-status
. Chỉ cần làm git show --name-status
cho thêm một chút thông tin, nhưng vẫn tốt và dày đặc ... đó sẽ là lệnh goto mới của tôi;)
git diff --name-status [SHA1 [SHA2]]
giống như - chỉ tên, 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]
là tương tự, nhưng các xác nhận được liệt kê sau thông báo cam kết, vì vậy bạn có thể thấy khi một tệp được thay đổi.
nếu bạn quan tâm đến chỉ là những gì đã xảy ra với một số tập tin / thư mục bạn có thể thêm -- <filename> [<filename>...]
vào git log
phiên bản.
nếu bạn muốn xem những gì đã xảy ra cho một cam kết duy nhất, hãy gọi nó là SHA1, sau đó làm
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 sao chép chỉnh sửa - 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
A đã thêm - Tệp đã được thêm
D Đã xóa - Tệp đã bị xóa
U không được trộn - Tệp có xung đột sau khi hợp nhất
--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 luôn | erep -v '(.tmp|.foo|.dontwant)$'
...
Dường như không ai đề cập đến việc chuyển đổi --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
và --shortstat
$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)
Nhưng để xem các tệp đã thay đổi giữa chi nhánh của bạn và tổ tiên chung của nó với một chi nhánh khác (giả sử nguồn gốc / chủ):
git diff --name-only `git merge-base origin/master HEAD`
git diffstatus master
hoặc tương tự, điều đó kích hoạt những điều trên.
git show --pretty=format: --name-only origin/master..
.
git diff --name-only master..branch
không tương ứng với danh sách PR của github. Cách này chính xác hơn. Nhưng dù sao tôi cũng có 173 tập tin đã được so sánh với 171 trong github PR. (không có merge-base
tôi có 228 so với 171)
Để 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 về quyề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 như đã xóa chứ không phải thêm.
Thêm một grep
có thể tinh chỉnh những thứ hơn nữa:
git diff --name-status mybranch..myotherbranch | grep "A\t"
Điều đó sau đó sẽ chỉ hiển thị các tập tin được thêm vào myotherbranch
.
--diff-filter
cung cấp chức năng này một cách tự nhiên, điều đó có nghĩa là ít có cơ hội cho kết quả không chính xác (ví dụ: dương tính giả)
Thêm bí danh dưới đây vào của bạn ~/.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 được cập nhật trong lần xác nhận cuối cùng, chạy, showfiles
từ kho git của bạn.
alias showfiles='git show --pretty="format:" --name-only'
git config --global alias.showfiles 'show --pretty="format:" --name-only'
để thực hiện git showfiles
.
Điều này sẽ hiển thị những thay đổi trong tập tin:
git diff --word-diff SHA1 SHA2
Sử dụng git log --pretty = oneline> C: \ filename.log
sẽ chỉ ghi nhật ký một dòng (--pretty = oneline) là tên của tệp đã thay đổi. Cũng sẽ ghi lại tất cả các chi tiết vào tập tin đầu ra của bạn.
git log --pretty=oneline
chỉ cung cấp cho tôi SHA và thông báo cam kết bằng git 2.10.1
Như artfulrobot đã nói trong câu trả lời của mình:
git diff --name-status [SHA1 [SHA2]]
Ví dụ của tôi:
git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997
4b95d595812211553070046bf2ebd807c0862cca
M views/layouts/default.ctp
M webroot/css/theme.css
A webroot/img/theme/logo.png
Chỉ dành cho ai đó chỉ cần tập trung vào các tệp Java, đây là giải pháp của tôi:
git diff --name-status SHA1 SHA2 | grep '\.java$'
Sau đây hoạt động tốt cho tôi:
$ git show --name-only --format=tformat: SHA1..SHA2
Nó cũng có thể được sử dụng với một cam kết duy nhất:
git show --name-only --format=tformat: SHA1
tiện dụng để sử dụng trong Jenkins nơi bạn được cung cấp Danh sách các thay đổi của SHA và muốn lặp lại chúng để xem tệp nào đã được thay đổi.
Điều này tương tự như một vài câu trả lời ở trên, nhưng sử dụng tformat:
thay vì format:
loại bỏ không gian phân cách giữa các lần xác nhận.
Dựa trên git diff --name-status
tôi đã viết phần mở rộng git-diffview git hiển thị chế độ xem dạng cây phân cấp về những gì đã thay đổi giữa hai đường dẫn.