วันพฤหัสบดีที่ 5 กุมภาพันธ์ พ.ศ. 2558

GIT - การนำกลับข้อมูลที่แก้ไขแล้วในรูปแบบต่างๆ


Data Recovery

รูปแบบนี้จะเป็นการเลือกย้อนไปยังการ commit ที่เราต้องการและล้างการแก้ไขก่อนหน้าการ commit ครั้งนั้นทั้งหมด

คำสั่งเรียกดูประวัติการ commit ของ git
git log --pretty=oneline
เมื่อใช้คำสั่งแล้วจะแสดงประวัติการ commit โดยจะแสดงตัวเลขฐาน 16 และ comment ที่เรา commit ไว้


คำสั่งกู้คืนการแก้ไขข้อมูลที่เคย commit ไว้ เป็นการย้อนสถาณะของไฟล์ทั้งหมดกลับไปเหมือนตอนที่ commit ครั้งนั้นไว้
git reset --hard 8436f9b2b51283f5088f2de488b58282c7a5e432
โดยใส่ตัวเลขด้านหน้า commit ที่เราต้องการกู้คืน
เมื่อใช้คำสั่งแล้วจะเห็นว่า commit ล่าสุดจะเป็น commit ที่เราต้องการ

ศึกษาเพิ่มเติม :
http://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery#_data_recovery


Unmodifying a Modified File

รูปแบบนี้จะเป็นการล้างการแก้ไขก่อนหน้าการ commit ครั้งล่าสุด

ลองทำการแก้ไขไฟล์ที่ได้ commit ไปแล้ว (functional_tests.py) ก่อนหน้าการ commit จะเป็นลักษณะดังภาพ

ทดลองใส่ comment code ส่วนฟังก์ชััน setUp และ tearDown (ทำการแก้ไขไฟล์)

เช็ค git status จะเห็นว่าไฟล์ functional_tests.py ถูกแก้ไข และบอกว่าการแก้ไขนั้นยังไม่ได้ถูก commit ไปยัง git

หากต้องการให้เนื้อหาของไฟล์กลับไปเป็นเหมือนก่อนหน้าที่ commit ใช้คำสั่ง
git checkout -- ชื่อไฟล์
เมื่อลองใช้คำสั่งและลองเช็ค git status จะเห็นว่าไม่มีการแก้ไขไฟล์ functional_tests.py แล้ว

เมื่อลองดูไฟล์ functional_tests.py จะเห็นว่าไม่มีการ comment code เหมือนกับก่อนที่จะทำการ commit

ศึกษาเพิ่มเติม :
http://git-scm.com/book/en/v2/Git-Basics-Undoing-Things 


Branches

รูปแบบนี้จะเป็นการสร้าง "กิ่ง" แยกออกไปเพื่อแก้ไขเพิ่มเติม และเมื่ออยากกลับมาเริ่มแก้ไขที่ commit เก่าๆก็สามารถสร้างกิ่งใหม่ออกไปอีกทาง โดยจะไม่มีผลกระทบต่อกัน และไม่มีผลกระทบต่อ commit เดิมด้วย

เริ่มต้นด้วยการดูการ commit ครั้งล่าสุดด้วยคำสั่ง
git log --oneline --decorate
โดยคำสั่ง --decorate จะแสดงกิ่งและตัวชี้(pointer)ว่าขณะนี้อยู่ที่ commit ไหน โดยกิ่งที่ git จะสร้างขึ้นมาตั้งแต่เริ่มต้นจะชื่อว่า master ซึ่งจะอยู่ที่ commit ครั้งล่าสุดของเรา และมีตัวชี้ชื่อว่า HEAD 

จากนั้นเราจะสร้างกิ่งใหม่ชื่อว่า testing โดยใช้คำสั่ง
git branch testing
จะได้กิ่งใหม่ขึ้นมาอยู่ตำแหน่งเดียวกับกิ่งที่เราทำงานด้วยอยู่ปัจจุบันคือ master

จากนั้นเราจะย้ายตัว pointer ไปยังกิ่ง testing เพื่อเริ่มทำงานที่กิ่ง testing ใช้คำสั่ง
git checkout testing


ทดลองทำการสร้างไฟล์ชื่อว่า new_file.py

ทำการ add ไฟล์นี้ไปยัง git และทำการ commit การแก้ไขนี้ว่า 'made a change'

เมื่อลองใช้คำสั่ง git log --oneline --decorate อีกครั้งจะเห็นว่ามีการ commit เพิ่มขึ้นมา
สังเกตว่าตัวกิ่ง master ไม่ได้ตามมาด้วย

เมื่อลองกลับไปให้ HEAD ชี้ที่ master ใช้คำสั่ง
git checkout master
จะเห็นว่าไฟล์ new_file.py หายไป

เมื่อลองกลับมาที่ testing ไฟล์ new_file.py ก็จะกลับมา

ศึกษาเพิ่มเติม :
http://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell

ไม่มีความคิดเห็น:

แสดงความคิดเห็น