หากคุณต้องการค้นหาการกระทำทั้งหมดที่การส่งข้อความมีคำที่กำหนดให้ใช้
$ git log --grep=word
หากคุณต้องการค้นหาการกระทำทั้งหมดที่มีการเพิ่มหรือลบคำว่า "word" ในเนื้อหาไฟล์ (เพื่อให้แม่นยำยิ่งขึ้น: เมื่อจำนวนการเปลี่ยนแปลงของคำว่า "word") คือการค้นหาเนื้อหาที่ยอมรับใช้การค้นหา 'pickaxe' ด้วย
$ git log -Sword
ในคอมไพล์สมัยใหม่ยังมี
$ git log -Gword
เพื่อค้นหาความแตกต่างที่เพิ่มหรือลบบรรทัดที่ตรงกับ "คำ" (รวมถึงเนื้อหา )
โปรดทราบว่า-G
โดยค่าเริ่มต้นยอมรับ regex ในขณะที่-S
ยอมรับสตริง แต่สามารถแก้ไขได้ที่จะยอมรับ regexes --pickaxe-regex
ใช้
หากต้องการแสดงความแตกต่างระหว่าง-S<regex> --pickaxe-regex
และ-G<regex>
ให้พิจารณาคอมมิตด้วย diff ต่อไปนี้ในไฟล์เดียวกัน:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
ในขณะที่git log -G"regexec\(regexp"
จะแสดงการกระทำนี้git log -S"regexec\(regexp" --pickaxe-regex
จะไม่ (เพราะจำนวนการเกิดขึ้นของสตริงนั้นไม่เปลี่ยนแปลง)
ด้วย Git 2.25.1 (ก.พ. 2563) เอกสารดังกล่าวได้รับการชี้แจงรอบ regexes เหล่านั้น
ดูกระทำ 9299f84 (6 กุมภาพันธ์ 2020) โดยมาร์ติน Agren ( ``)
(รวมโดยJunio C Hamano - gitster
-ในการกระทำ 0d11410 , 12 กุมภาพันธ์ 2020)
diff-options.txt
: หลีกเลี่ยงการโอเวอร์โหลด "regex" ในตัวอย่าง
รายงานโดย: Adam Dinwoodie
ลงชื่อโดย: Martin Ågren
บทวิจารณ์โดย: Taylor Blau
เมื่อเราเป็นตัวอย่างความแตกต่างระหว่าง-G
และ-S
(โดยใช้--pickaxe-regex
) เราจะใช้ตัวอย่าง diff และgit diff
การเรียกที่เกี่ยวข้องกับ "regexec", "regexp", "regmatch", ...
ตัวอย่างนี้ถูกต้อง แต่เราสามารถทำให้แก้ให้หายยุ่งได้ง่ายขึ้นโดยหลีกเลี่ยงการเขียน "regex. *" เว้นแต่จะจำเป็นต้องทำให้ประเด็นของเราเป็นจริง
ใช้คำที่สร้างขึ้นและไม่ใช่คำที่ไม่ใช่ regexy แทน
git diff
เอกสารในขณะนี้รวมถึง:
หากต้องการแสดงความแตกต่างระหว่าง-S<regex> --pickaxe-regex
และ
-G<regex>
ให้พิจารณาคอมมิตด้วย diff ต่อไปนี้ในไฟล์เดียวกัน:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
ในขณะที่git log -G"frotz\(nitfol"
จะแสดงการกระทำนี้git log
-S"frotz\(nitfol" --pickaxe-regex
จะไม่ (เพราะจำนวนการเกิดขึ้นของสตริงนั้นไม่เปลี่ยนแปลง)