[Git] Export file in revision

tar czf path/to/your/folder/changed-files.tar.gz `git diff --name-only --diff-filter=AM HEAD^ HEAD`

--name-only คือให้แสดงเฉพาะไฟล์ ที่เราได้ git diff เอาไว้
--diff-filter=AM คือกรองเอาเฉพาะไฟล์ที่เพิ่ม(A) กับ มีการเปลี่ยนแปลง(M)

ส่วนที่ว่าทำไมต้องเป็น HEAD^ มีอธิบายไว้ใน git diff --help ครับ ลองไปอ่านกันเอาเอง
$ git diff HEAD^ HEAD (3)
3. Compare the version before the last commit and the last commit.

ถ้าเราจะใช้เป็น zip ก็แค่ปรับเป็น
zip path/to/your/folder/changed-files.zip `git diff --name-only --diff-filter=AM HEAD^ HEAD`

ตรง HEAD^ กับ HEAD เราสามารถเปลี่ยนได้นะ อย่างเช่น ถ้าเปลี่ยนเป็น
16eeae5 HEAD
ก็คือ Export ตั้งแต่เวอร์ชั่น 16eeae5 จนถึงเวอร์ชั่นปัจจุบัน เป็นต้น

ปล. ถ้าเป็นอักขระพิเศษหรือช่องว่างมันจะ export ออกมาไม่ได้ ต้องลองอ่านตัวนี้

แก้ไขเพิ่มเติม สำหรับ Windows
ต้องออกตัวก่อนว่าไม่ถนัด Powershell เลยได้ท่านี้มาแทนครับ
git archive -o latest.zip HEAD $(git diff --name-only --diff-filter=AM HEAD^ HEAD)

ถ้าไม่แน่ใจว่ามันจะ Export ออกมาถูกรึป่าวก็ให้เราเทสเพื่อดูไฟล์จาก git diff ก่อนครับถ้ามันโอเคแล้วก็ครอบด้วยวงเล็บ ;)

อ้างอิง
https://stackoverflow.com/questions/3423540/zip-latest-committed-changes-only

Comments