วิธีที่ดีในการจัดการรายการเปลี่ยนแปลงโดยใช้คอมไพล์?


214

ฉันใช้ Git มาระยะหนึ่งแล้วและฉันเพิ่งเริ่มใช้เพื่อติดแท็กการเผยแพร่ของฉันเพื่อให้ฉันสามารถติดตามการเปลี่ยนแปลงได้ง่ายขึ้นและสามารถดูว่าลูกค้าของเราแต่ละคนกำลังทำงานอยู่ในเวอร์ชันใด ลูกค้าแต่ละคนมีสำเนาของเว็บไซต์ PHP ของตัวเองฉันเปลี่ยนมัน แต่มันช้าไป)

ไม่ว่าในกรณีใดเรากำลังเริ่มสร้างแรงผลักดันบางอย่างฉันคิดว่ามันจะดีจริง ๆ ที่สามารถแสดงให้ผู้คนเห็นว่ามีอะไรเปลี่ยนแปลงไปตั้งแต่เปิดตัวครั้งล่าสุด ปัญหาคือฉันไม่ได้รักษาความเปลี่ยนแปลงเพราะฉันไม่มีความคิดที่ดีว่าจะทำอย่างไร สำหรับเวลานี้ฉันสามารถเรียกใช้ผ่านบันทึกและสร้างด้วยตนเอง แต่มันจะเหนื่อยมาก

ฉันลองใช้ googling "git changelog" และ "git Manage changelog" แต่ฉันไม่พบสิ่งใดที่พูดถึงกระบวนการเวิร์กโฟลว์ของการเปลี่ยนแปลงโค้ดอย่างแท้จริงและวิธีการที่สอดคล้องกับการเปลี่ยนแปลงนั้น ขณะนี้เรากำลังติดตามเวิร์กโฟลว์การพัฒนาของ Rein Henrichและฉันจะรักสิ่งที่สอดคล้องกับสิ่งนั้น

มีวิธีการมาตรฐานที่ฉันขาดหายไปหรือเป็นพื้นที่ที่ทุกคนทำสิ่งของตัวเอง?

ขอบคุณมากสำหรับความเห็น / คำตอบของคุณ!

คำตอบ:


181

นี่คือประมาณ 3-4 ปีที่ผ่านมา แต่เพื่อประโยชน์ของผู้ค้นหาในอนาคตตอนนี้มันเป็นไปได้ที่จะสร้างบันทึกที่งดงามด้วย:

git log --oneline --decorate

หรือถ้าคุณต้องการมันยิ่งสวย (ด้วยสีสำหรับเทอร์มินัล):

git log --oneline --decorate --color

การส่งออกไปยัง ChangeLog นั้นเป็นสิ่งที่ฉันใช้ในโครงการของฉันในปัจจุบันทั้งหมดมันยอดเยี่ยมมาก


4
อีกแท็กที่มีประโยชน์คือแท็ก--graphที่แสดงให้คุณเห็นว่าเปิดคอมมิทใดไว้
Eruant

44
ฉันขอแนะนำอย่างยิ่งให้ต่อต้านการใช้บันทึกของขวัญแตกต่างกันในรายการ CHANGELOG: keepachangelog.com
Olivier Lacan

4
การคัดลอกgit logเอาต์พุตไปยัง changelog ไม่มีความหมาย คุณต้องทำการกรองและแก้ไขเพื่อให้มีการเปลี่ยนแปลงที่สามารถอ่านได้มิฉะนั้นทำไมคุณถึงต้องมีการเปลี่ยนแปลง ฉันคิดว่าคุณสามารถสร้างการเปลี่ยนแปลงได้โดยอัตโนมัติ แต่โปรดอย่าทำสำเนาดิบgit log!
vaab

19
ปัญหาของสิ่งนี้คือแม้ว่าสมมติว่าผู้มีส่วนร่วมทุกคนในโครงการของคุณเขียนข้อความกระทำที่ชัดเจนและอ่านได้คุณจะยังคงสร้าง "บันทึกการเปลี่ยนแปลง" ที่มีสัญญาณรบกวนจำนวนมาก changelogs ควรจะเขียนมีเป้าหมายในการอธิบายให้ที่ผู้ใช้งานของโครงการของคุณโดดเด่นเปลี่ยนแปลงเกี่ยวข้องกับพวกเขาที่เกิดขึ้นระหว่างการเผยแพร่ในขณะที่กระทำข้อความควรจะเน้นการอธิบายให้นักพัฒนาปรับปรุงสิ่งที่คุณกระทำทำให้รหัส บางครั้งมีการทับซ้อนกัน แต่ไม่เสมอไป
Ajedi32

7
หรือเพื่อให้เป็นรูปธรรมมากขึ้นวิธีนี้จะสร้าง "บันทึกการเปลี่ยนแปลง" ที่มีรายการมากมายเช่น "แก้ไขการสะกดคำของ fooMethod ใน ZModule" และ "Refactor XModule เพื่อใช้ XYLibarary รุ่นใหม่" ผู้ใช้ของคุณไม่สนใจสิ่งนั้น พวกเขาต้องการทราบว่ามีการเปลี่ยนแปลงอะไรบ้างจากมุมมองของพวกเขาในฐานะผู้ใช้ไม่ใช่มุมมองของคุณในฐานะนักพัฒนา และนั่นคือการเพิกเฉยสิ่งต่าง ๆ เช่น "ผสาน PR # 123 จาก xdev / foo" และ "Opps แก้ไขคุณลักษณะใหม่เพื่อให้ใช้งานได้จริง" พิมพ์สิ่งต่าง ๆ ที่น่าจะมีอยู่ในโลกแห่งความเป็นจริงใด ๆ
Ajedi32

60

คุณสามารถใช้รสชาติของบันทึกการใช้คอมไพล์เพื่อช่วยคุณได้:

git log --pretty=%s                 # only print the subject

หากคุณตั้งชื่อสาขาของคุณเป็นอย่างดีเพื่อให้การผสานต้นแบบปรากฏเป็น "Merged branch Feature-foobar" คุณสามารถตัดทอนสิ่งต่าง ๆ ได้โดยการแสดงข้อความนั้นเท่านั้น ลักษณะเฉพาะ:

git log --pretty=%s --first-parent  # only follow first parent of merges

คุณอาจจะสามารถเพิ่มสิ่งนี้ด้วยสคริปต์ของคุณเองซึ่งสามารถทำสิ่งต่าง ๆ เช่นการแยกบิต "สาขาผสาน" การจัดรูปแบบปกติ ฯลฯ ในบางจุดคุณต้องเขียนด้วยตัวคุณเองแน่นอน

จากนั้นคุณสามารถสร้างส่วนใหม่สำหรับการเปลี่ยนแปลงหนึ่งครั้งต่อเวอร์ชัน:

git log [opts] vX.X.X..vX.X.Y | helper-script > changelogs/X.X.Y

และยอมรับว่าในเวอร์ชันรีลีสของคุณส่งมอบ

หากปัญหาของคุณคือผู้ที่กระทำวิชาไม่เหมือนอะไรที่คุณต้องการที่จะใส่ในการเปลี่ยนแปลงคุณมีสองตัวเลือก: ทำทุกอย่างด้วยตนเอง (และพยายามที่จะทำมันอย่างสม่ำเสมอมากกว่าการเล่น catch- ขึ้นอยู่กับเวลาที่วางจำหน่าย) หรือแก้ไขสไตล์การส่งข้อความของคุณ ตัวเลือกหนึ่งหากหัวเรื่องไม่ได้ทำเพื่อคุณจะวางบรรทัดเช่น "change: feature feature foobar" ในเนื้อหาของข้อความคอมมิทของคุณเพื่อให้ในภายหลังคุณสามารถทำสิ่งที่ต้องการgit log --pretty=%B | grep ^change:คว้าเฉพาะสุดยอด บิตที่สำคัญของข้อความ

ฉันไม่แน่ใจทั้งหมดว่า git นั้นสามารถช่วยคุณสร้างการเปลี่ยนแปลงได้จริง ๆ บางทีฉันอาจตีความผิดที่คุณหมายถึง "จัดการ"


2
นั่นเป็นจุดเริ่มต้นที่ดีมากและฉันก็ไม่ได้คิดที่จะเพิ่มตัวดัดแปลงเข้าไปในร่างกายเพื่อที่ฉันจะได้ grep ในภายหลัง นั่นอาจเป็นสิ่งที่ฉันเลิกทำ ขอบคุณสำหรับความคิดเห็น! หากไม่มีคำตอบเข้ามาภายในวันถัดไปฉันจะทำเครื่องหมายคำตอบของคุณเป็น :-)
Topher Fangio

60

หมายเหตุ:ผมผู้เขียนของgitchangelogซึ่งผมจะพูดต่อไปนี้

TL: DR:คุณอาจต้องการตรวจสอบการเปลี่ยนแปลงของ gitchangelogหรือเอาต์พุต asciiที่สร้างก่อนหน้านี้

หากคุณต้องการสร้างการเปลี่ยนแปลงจากประวัติ git ของคุณคุณอาจต้องพิจารณา:

  • รูปแบบการออก (ASCII แบบกำหนดเองที่บริสุทธิ์ประเภท Debian changelog, Markdow, ReST ... )
  • บางกระทำการกรอง (คุณอาจไม่ต้องการที่จะเห็นทั้งหมดหรือเปลี่ยนแปลงเครื่องสำอาง typo ที่ได้รับในการเปลี่ยนแปลงของคุณ)
  • บางคนกระทำการบิดข้อความก่อนที่จะรวมอยู่ในการเปลี่ยนแปลง (การทำให้มาตรฐานของข้อความเป็นตัวอักษรตัวใหญ่ตัวพิมพ์ใหญ่หรือจุดสุดท้าย แต่มันอาจจะเป็นการลบมาร์กอัปพิเศษในบทสรุปด้วย)
  • ประวัติคอมไพล์ของคุณเข้ากันได้ไหม. การรวมการติดแท็กอาจไม่ได้รับการสนับสนุนอย่างง่ายดายจากเครื่องมือส่วนใหญ่ ขึ้นอยู่กับว่าคุณจัดการประวัติของคุณอย่างไร

ไม่จำเป็นคุณอาจต้องการการจัดหมวดหมู่ (สิ่งใหม่การเปลี่ยนแปลงข้อผิดพลาด) ...

ด้วยทั้งหมดนี้ในใจผมสร้างและการใช้gitchangelog มันหมายถึงการใช้ประโยชน์จากการคอมไพล์ข้อความคอมไพล์เพื่อให้บรรลุเป้าหมายก่อนหน้านี้ทั้งหมด

การมีข้อตกลงการส่งข้อความเป็นสิ่งที่จำเป็นในการสร้างการเปลี่ยนแปลงที่ดี (มีหรือไม่มีการใช้gitchangelog)

ยอมรับการประชุมข้อความ

ต่อไปนี้เป็นคำแนะนำเกี่ยวกับสิ่งที่อาจเป็นประโยชน์ในการคิดเกี่ยวกับการเพิ่มในข้อความที่ส่งถึงคุณ

คุณอาจต้องการแยกข้อผูกพันของคุณออกเป็นส่วนใหญ่:

  • โดยเจตนา (ตัวอย่างเช่นใหม่แก้ไขเปลี่ยนแปลง ... )
  • โดยวัตถุ (เช่น: doc, บรรจุภัณฑ์, รหัส ... )
  • โดยผู้ชม (เช่น: dev, ผู้ทดสอบ, ผู้ใช้ ... )

นอกจากนี้คุณอาจต้องการติดแท็กคอมมิทบางอย่าง:

  • ในฐานะ "ผู้เยาว์" ที่ไม่ควรส่งออกไปยังรายการเปลี่ยนแปลงของคุณ (การเปลี่ยนแปลงเครื่องสำอางการพิมพ์ผิดขนาดเล็กในความคิดเห็น ... )
  • ในฐานะ "refactor" หากคุณไม่มีการเปลี่ยนแปลงคุณสมบัติที่สำคัญใด ๆ ดังนั้นสิ่งนี้ไม่ควรเป็นส่วนหนึ่งของการเปลี่ยนแปลงที่แสดงต่อผู้ใช้ขั้นสุดท้ายเช่นกัน แต่อาจเป็นที่สนใจหากคุณมีการเปลี่ยนแปลงนักพัฒนา
  • คุณสามารถติดแท็กด้วย "api" เพื่อทำเครื่องหมายการเปลี่ยนแปลง API หรือสิ่ง API ใหม่ ...
  • ... ฯลฯ ...

พยายามเขียนข้อความการส่งของคุณโดยกำหนดเป้าหมายผู้ใช้ (ฟังก์ชันการทำงาน) บ่อยเท่าที่จะทำได้

ตัวอย่าง

นี่เป็นมาตรฐานที่git log --onelineจะแสดงวิธีการจัดเก็บข้อมูลเหล่านี้ ::

* 5a39f73 fix: encoding issues with non-ascii chars.
* a60d77a new: pkg: added ``.travis.yml`` for automated tests. 
* 57129ba new: much greater performance on big repository by issuing only one shell command for all the commits. (fixes #7)
* 6b4b267 chg: dev: refactored out the formatting characters from GIT.
* 197b069 new: dev: reverse ``natural`` order to get reverse chronological order by default. !refactor 
* 6b891bc new: add utf-8 encoding declaration !minor 

ดังนั้นหากคุณสังเกตเห็นรูปแบบที่ฉันเลือกคือ:

{new|chg|fix}: [{dev|pkg}:] COMMIT_MESSAGE [!{minor|refactor} ... ]

หากต้องการดูผลลัพธ์จริงคุณสามารถดูที่ส่วนท้ายของหน้าPyPIของgitchangelog

หากต้องการดูเอกสารฉบับเต็มของข้อตกลงการส่งข้อความของฉันคุณสามารถดูไฟล์อ้างอิงgitchangelog.rc.reference

วิธีการสร้างการเปลี่ยนแปลงที่ยอดเยี่ยมจากนี้

จากนั้นมันค่อนข้างง่ายที่จะทำให้การเปลี่ยนแปลงที่สมบูรณ์ gitchangelogคุณสามารถทำให้สคริปต์ของคุณเองได้อย่างรวดเร็วมากหรือการใช้งาน

gitchangelogจะสร้างการเปลี่ยนแปลงแบบเต็ม (ด้วยการสนับสนุนการแบ่งส่วนเป็นNew, Fix... ) และมีการกำหนดค่าที่เหมาะสมกับการประชุมยอมรับของคุณเอง มันสนับสนุนประเภทของการส่งออกขอบคุณใด ๆ ที่จะ templating ผ่านMustache, Mako templatingและมีเครื่องมือแบบเดิมเริ่มต้นที่เขียนในหลามดิบ เอ็นจิ้น 3 ทั้งหมดในปัจจุบันมีตัวอย่างของวิธีการใช้และสามารถเปลี่ยนเอาท์พุทของการเปลี่ยนแปลงตามที่แสดงในหน้า PyPI ของ gitchangelog

ฉันแน่ใจว่าคุณรู้ว่ามีความอุดมสมบูรณ์ของอื่น ๆgit logที่จะchangelogมีเครื่องมือออกยัง


1
สิ่งนี้ยอดเยี่ยมสิ่งที่ฉันกำลังมองหา ฉันจะลองดูนะขอบคุณมาก!
Jeff Kiiza


23

gitlog-to-changelogสคริปต์มาในที่มีประโยชน์ในการสร้าง ChangeLogGNU

ดังที่แสดงโดยgitlog-to-changelog --helpคุณสามารถเลือกคอมมิทที่ใช้สร้างChangeLogไฟล์โดยใช้ตัวเลือก--since:

gitlog-to-changelog --since=2008-01-01 > ChangeLog

หรือโดยการส่งอาร์กิวเมนต์เพิ่มเติมหลังจาก--ซึ่งจะถูกส่งผ่านไปยังgit-log(เรียกภายในโดยgitlog-to-changelog):

gitlog-to-changelog -- -n 5 foo > last-5-commits-to-branch-foo

ตัวอย่างเช่นฉันใช้กฎต่อไปนี้ในระดับบนสุดMakefile.amของหนึ่งในโครงการของฉัน:

.PHONY: update-ChangeLog
update-ChangeLog:
    if test -d $(srcdir)/.git; then                         \
       $(srcdir)/build-aux/gitlog-to-changelog              \
          --format='%s%n%n%b%n' --no-cluster                \
          --strip-tab --strip-cherry-pick                   \
          -- $$(cat $(srcdir)/.last-cl-gen)..               \
        >ChangeLog.tmp                                      \
      && git rev-list -n 1 HEAD >.last-cl-gen.tmp           \
      && (echo; cat $(srcdir)/ChangeLog) >>ChangeLog.tmp    \
      && mv -f ChangeLog.tmp $(srcdir)/ChangeLog            \
      && mv -f .last-cl-gen.tmp $(srcdir)/.last-cl-gen      \
      && rm -f ChangeLog.tmp;                               \
    fi

EXTRA_DIST += .last-cl-gen

กฎนี้ใช้ในเวลาเผยแพร่เพื่ออัปเดตChangeLogด้วยข้อความยืนยันล่าสุดที่ยังไม่ได้บันทึก ไฟล์.last-cl-genมีตัวระบุ SHA1 ของการส่งข้อความล่าสุดที่บันทึกไว้ChangeLogและถูกเก็บไว้ในที่เก็บ Git ChangeLogจะถูกบันทึกในที่เก็บเพื่อให้สามารถแก้ไขได้ (เช่นเพื่อแก้ไขความผิดพลาด) โดยไม่แก้ไขข้อความการส่ง


สคริปต์ mklog ของ GCC อาจน่าสนใจเช่น: stackoverflow.com/a/31606865/895245
Ciro Santilli 郝海东冠状病病六四事件法轮功

นี่เป็นโครงการที่ชนะ! ทำไมคุณถึงไม่มี GitHub?
Omer Dagan

20

เนื่องจากการสร้างแท็กต่อรุ่นเป็นวิธีปฏิบัติที่ดีที่สุดคุณอาจต้องการแบ่งพาร์ติชันรายการเปลี่ยนแปลงต่อรุ่น ในกรณีนั้นคำสั่งนี้สามารถช่วยคุณได้:

git log YOUR_LAST_VERSION_TAG..HEAD --no-merges --format=%B

15

สำหรับโครงการGitHubมันอาจมีประโยชน์: github-changelog-generator

มันสร้างการเปลี่ยนแปลงจากปัญหาแท็กปิดและดึงคำขอรวม

นี้CHANGELOG.mdถูกสร้างขึ้นโดยสคริปต์นี้

ตัวอย่าง:

การเปลี่ยนแปลง

1.2.5 (2015-01-15)

เต็มรูปแบบการเปลี่ยนแปลง

การดำเนินการปรับปรุง:

  • ใช้เหตุการณ์สำคัญเพื่อระบุว่ามีการแก้ไขข้อบกพร่องรุ่นที่# 22

แก้ไขข้อบกพร่อง:

  • เกิดข้อผิดพลาดเมื่อพยายามสร้างบันทึกสำหรับ repo ที่ไม่มีแท็ก# 32

คำขอดึงรวม:

  • คลาส PrettyPrint รวมอยู่ในการใช้ตัวพิมพ์เล็ก 'pp' # 43 ( schwing )

  • สนับสนุนองค์กร GitHub ผ่านตัวเลือกบรรทัดคำสั่ง# 42 ( glenlovett )


โครงการดังกล่าวดีที่สุด :) คุณมีแรงจูงใจที่จะทำอะไร? นอกจากนี้ต้องขอบคุณแรงบันดาลใจของคุณฉันทำเครื่องมือที่คล้ายกันซึ่งทำงานโดยไม่มีป้ายกำกับแยกเป็นเพิ่ม / เปลี่ยน / แก้ไข / ลบออกและอยู่ใน PHP (ภาษา "ดั้งเดิมของฉัน"): github.com/Symplify/ChangelogLinker คุณเขียนโพสต์เกี่ยวกับ Changlogs ? ฉันต้องการอ่านพวกเขา
Tomáš Votruba

1
@ TomášVotrubaขอบคุณสำหรับคำพูดที่อบอุ่น มันเป็นแค่งานอดิเรกของฉัน ฉันไม่ได้โพสต์มาก แต่ฉันคิดว่ามันคุ้มค่า ด้วยความปรารถนาดี!
skywinder

10

ฉันยังทำห้องสมุดสำหรับสิ่งนี้ สามารถกำหนดค่าได้อย่างสมบูรณ์ด้วยเทมเพลตหนวด ที่สามารถ:

  • ได้รับการจัดเก็บไฟล์เช่นCHANGELOG.md
  • ถูกโพสต์ไปที่MediaWiki
  • หรือเพียงพิมพ์ไปที่ STDOUT

ฉันยังทำ:

รายละเอียดเพิ่มเติมเกี่ยวกับ Github: https://github.com/tomasbjerre/git-changelog-lib

จากบรรทัดคำสั่ง:

npx git-changelog-command-line -std -tec "
# Changelog

Changelog for {{ownerName}} {{repoName}}.

{{#tags}}
## {{name}}
 {{#issues}}
  {{#hasIssue}}
   {{#hasLink}}
### {{name}} [{{issue}}]({{link}}) {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
   {{^hasLink}}
### {{name}} {{issue}} {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
  {{/hasIssue}}
  {{^hasIssue}}
### {{name}}
  {{/hasIssue}}

  {{#commits}}
**{{{messageTitle}}}**

{{#messageBodyItems}}
 * {{.}} 
{{/messageBodyItems}}

[{{hash}}](https://github.com/{{ownerName}}/{{repoName}}/commit/{{hash}}) {{authorName}} *{{commitTime}}*

  {{/commits}}

 {{/issues}}
{{/tags}}
"

หรือในเจนกินส์:

ป้อนคำอธิบายรูปภาพที่นี่


3
git log --oneline --no-merges `git describe --abbrev=0 --tags`..HEAD | cut -c 9- | sort

เป็นสิ่งที่ฉันชอบที่จะใช้ รับทั้งหมดตั้งแต่แท็กสุดท้าย cutกำจัดแฮชคอมมิท sortหากคุณใช้หมายเลขตั๋วที่จุดเริ่มต้นของข้อความกระทำของคุณที่พวกเขาจะถูกจัดกลุ่มด้วย การเรียงลำดับช่วยได้เช่นกันหากคุณใส่ค่านำหน้าบางอย่างfixเช่นtypo, ฯลฯ


3

ฉันปล่อยให้เซิร์ฟเวอร์ CI ไปป์ต่อไปนี้เป็นไฟล์ที่มีชื่อCHANGELOGสำหรับแต่ละรีลีสใหม่โดยมีวันที่ที่กำหนดในชื่อไฟล์รีลีส:

>git log --graph --all --date=relative --pretty=format:"%x09 %ad %d %s (%aN)"

2

สำหรับการเปลี่ยนแปลงสไตล์ของ GNUฉันได้ทำฟังก์ชั่นนี้แล้ว

gnuc() {
  {
    printf "$(date "+%Y-%m-%d")  John Doe  <john.doe@gmail.com>\n\n"
    git diff-tree --no-commit-id --name-only -r HEAD | sed 's/^/\t* /'
  } | tee /dev/tty | xsel -b
}

ด้วยสิ่งนี้:

  • ฉันยอมรับการเปลี่ยนแปลงของฉันเป็นระยะเพื่อสำรองและรีบูตพวกเขาก่อนที่จะทำการแก้ไขขั้นสุดท้ายกับ ChangeLog
  • จากนั้นเรียกใช้: gnuc

และตอนนี้คลิปบอร์ดของฉันมีสิ่งต่อไปนี้:

2015-07-24  John Doe  <john.doe@gmail.com>

        * gdb/python/py-linetable.c (): .
        * gdb/python/py-symtab.c (): .

จากนั้นฉันใช้คลิปบอร์ดเป็นจุดเริ่มต้นในการอัปเดต ChangeLog

มันไม่สมบูรณ์แบบ (เช่นไฟล์ควรสัมพันธ์กับเส้นทาง ChangeLog ของพวกเขาดังนั้นpython/py-symtab.cหากไม่มีgdb/ฉันจะแก้ไขgdb/ChangeLog) แต่เป็นจุดเริ่มต้นที่ดี

สคริปต์ขั้นสูงเพิ่มเติม:

ฉันต้องเห็นด้วยกับ Tromey ว่า: การทำคอมไพล์การคอมมิตซ้ำ ๆ ใน ChangeLog นั้นไร้ประโยชน์

หากคุณกำลังจะทำการเปลี่ยนแปลงให้เป็นบทสรุปที่ดีของสิ่งที่เกิดขึ้นอาจเป็นไปตามที่ระบุไว้ที่http://keepachangelog.com/


2

ขึ้นอยู่กับbithavocก็แสดงจนกว่าlast tag HEADแต่ฉันหวังว่าจะแสดงรายการบันทึกระหว่าง 2 แท็ก

// 2 or 3 dots between `YOUR_LAST_VERSION_TAG` and `HEAD`
git log YOUR_LAST_VERSION_TAG..HEAD --no-merges --format=%B

บันทึกรายการระหว่าง 2 แท็ก

// 2 or 3 dots between 2 tags
git log FROM_TAG...TO_TAG

ยกตัวอย่างเช่นมันจะมีรายการบันทึกจากไปv1.0.0v1.0.1

git log v1.0.0...v1.0.1 --oneline --decorate

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.