ฉันมีความมุ่งมั่นใน repo ฉันต้องการดูรายการไฟล์ที่เปลี่ยนระหว่างการคอมมิทสองครั้ง - จาก SHA1 เป็น SHA2
ฉันควรใช้คำสั่งอะไร
ฉันมีความมุ่งมั่นใน repo ฉันต้องการดูรายการไฟล์ที่เปลี่ยนระหว่างการคอมมิทสองครั้ง - จาก SHA1 เป็น SHA2
ฉันควรใช้คำสั่งอะไร
คำตอบ:
git diff --name-only SHA1 SHA2
ในกรณีที่คุณจะต้องรวม SHA เพียงพอเพื่อระบุข้อผูกพัน ตัวอย่างเช่นคุณสามารถทำได้
git diff --name-only HEAD~10 HEAD~5
เพื่อดูความแตกต่างระหว่างการส่งมอบครั้งที่สิบล่าสุดและครั้งที่ห้าครั้งล่าสุด (หรือมากกว่านั้น)
git show --name-only SHA1
.
git diff --name-status [TAG|SHA1]
แสดงให้เห็นว่าการดำเนินการใดที่ทำกับไฟล์เช่นกัน
git diff --name-status
ดูเหมือนจะไม่ต้องการแสดงไฟล์ที่เพิ่มเข้ามา @sschuberth ชี้git show
ซึ่งดูเหมือนจะทำงานได้อย่างถูกต้องสำหรับฉัน: git show --pretty=format: --name-status
. เพียงแค่การทำgit show --name-status
จะช่วยให้ข้อมูลอีกเล็กน้อย แต่ยังคงมีความสุขและมีความหนาแน่น ... ที่จะเป็นคำสั่งกลับไปข้างใหม่ของฉัน;)
git diff --name-status [SHA1 [SHA2]]
เป็นเหมือน - ชื่อเท่านั้นยกเว้นคุณจะมีคำนำหน้าง่าย ๆ บอกคุณว่าเกิดอะไรขึ้นกับไฟล์ (แก้ไขลบเพิ่ม ... )
git log --name-status --oneline [SHA1..SHA2]
คล้ายกัน แต่การคอมมิทจะถูกแสดงหลังจากข้อความคอมมิทดังนั้นคุณสามารถเห็นได้ว่าเมื่อใดที่ไฟล์ถูกเปลี่ยน
หากคุณสนใจในสิ่งที่เกิดขึ้นกับบางไฟล์ / โฟลเดอร์ที่คุณสามารถผนวก-- <filename> [<filename>...]
กับgit log
รุ่น
หากคุณต้องการที่จะเห็นสิ่งที่เกิดขึ้นสำหรับการกระทำที่เรียกว่า SHA1 แล้วทำ
git log --name-status --oneline [SHA1^..SHA1]
แฟล็กสถานะไฟล์:
แก้ไข M - แก้ไขไฟล์
C คัดลอกแก้ไข - แก้ไขไฟล์และแก้ไข
R เปลี่ยนชื่อ - แก้ไขไฟล์แล้วเปลี่ยนชื่อและแก้ไข
A เพิ่มเติม - เพิ่มไฟล์เพิ่ม
D ลบ - ลบไฟล์แล้ว
U unmerged - ไฟล์มีข้อขัดแย้งหลังการรวม
--relative[=<path>]
ตัวเลือกที่อาจช่วยให้คุณผมไม่แน่ใจว่า มิฉะนั้นจะมีเสมอ| erep -v '(.tmp|.foo|.dontwant)$'
...
ดูเหมือนว่าไม่มีใครพูดถึงสวิตช์--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(-)
นอกจากนี้ยังมี --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(-)
แต่สำหรับการดูไฟล์ที่เปลี่ยนไประหว่างสาขาของคุณและบรรพบุรุษร่วมกับสาขาอื่น (พูดกำเนิด / ต้นแบบ)
git diff --name-only `git merge-base origin/master HEAD`
git diffstatus master
หรือคล้ายกันที่ก่อให้เกิดข้างต้น
git show --pretty=format: --name-only origin/master..
หรือ
git diff --name-only master..branch
ไม่สอดคล้องกับรายการ PR GitHub วิธีนี้แม่นยำยิ่งขึ้น แต่อย่างไรก็ตามฉันมี 173 ไฟล์ chaned เทียบกับ 171 ใน github PR (ไม่มีmerge-base
ฉันมี 228 กับ 171)
เพื่อเสริมคำตอบของ @ artfulrobot หากคุณต้องการแสดงไฟล์ที่ถูกเปลี่ยนระหว่างสองสาขา:
git diff --name-status mybranch..myotherbranch
ระวังให้ดีก่อน หากคุณวางสาขาที่ใหม่กว่าก่อนมันจะแสดงไฟล์ที่ถูกลบมากกว่าที่จะเพิ่ม
การเพิ่มgrep
สามารถปรับแต่งสิ่งต่าง ๆ เพิ่มเติม:
git diff --name-status mybranch..myotherbranch | grep "A\t"
จากนั้นจะแสดงเฉพาะไฟล์ที่เพิ่มเข้าmyotherbranch
มา
--diff-filter
ฟังก์ชั่นนี้ซึ่งช่วยในการทำงานซึ่งหมายความว่ามีโอกาสน้อยกว่าที่จะได้ผลลัพธ์ที่ไม่ถูกต้อง (เช่นผลบวกปลอม)
เพิ่มชื่อแทนด้านล่างของคุณ~/.bash_profile
จากนั้นเรียกใช้source ~/.bash_profile
; ตอนนี้ทุกเวลาที่คุณต้องการดูไฟล์ที่อัพเดตในคอมมิทล่าสุด, รัน, showfiles
จากที่เก็บ git ของคุณ
alias showfiles='git show --pretty="format:" --name-only'
git config --global alias.showfiles 'show --pretty="format:" --name-only'
git showfiles
นี่จะแสดงการเปลี่ยนแปลงในไฟล์:
git diff --word-diff SHA1 SHA2
และโปรดทราบว่าหากคุณต้องการดูไฟล์ที่เปลี่ยนแปลงระหว่างการคอมมิทล่าสุดและไฟล์ก่อนหน้า ใช้งานได้ดี:git show --name-only
ใช้บันทึก git --pretty = oneline> C: \ filename.log
ซึ่งจะเข้าสู่ระบบเฉพาะ oneline (--pretty = oneline) ที่ชื่อของไฟล์ที่เปลี่ยนแปลง จะบันทึกรายละเอียดทั้งหมดไปยังไฟล์เอาต์พุตของคุณ
git log --pretty=oneline
ให้ฉันเฉพาะ SHA และข้อความคอมมิชชันที่ใช้ git 2.10.1
ดังที่ artfulrobot กล่าวไว้ในคำตอบของเขา:
git diff --name-status [SHA1 [SHA2]]
ตัวอย่างของฉัน:
git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997
4b95d595812211553070046bf2ebd807c0862cca
M views/layouts/default.ctp
M webroot/css/theme.css
A webroot/img/theme/logo.png
สำหรับผู้ที่ต้องการเน้นเฉพาะไฟล์ Java เท่านั้นนี่คือโซลูชันของฉัน:
git diff --name-status SHA1 SHA2 | grep '\.java$'
ต่อไปนี้ใช้งานได้ดีสำหรับฉัน:
$ git show --name-only --format=tformat: SHA1..SHA2
นอกจากนี้ยังสามารถใช้กับการกระทำเดียว:
git show --name-only --format=tformat: SHA1
ซึ่งมีประโยชน์สำหรับการใช้งานใน Jenkins ซึ่งคุณได้รับ List of changeSet SHA แล้วและต้องการทำซ้ำเพื่อดูว่าไฟล์ใดมีการเปลี่ยนแปลง
นี่คล้ายกับคำตอบสองสามข้อด้านบน แต่การใช้tformat:
แทนที่จะformat:
ลบช่องว่างระหว่างการคอมมิท
จากgit diff --name-status
ฉันเขียนส่วนขยายgit-diffview git ที่แสดงมุมมองต้นไม้แบบลำดับชั้นของสิ่งที่เปลี่ยนแปลงระหว่างสองเส้นทาง