มีวิธีใดบ้างที่ฉันนำคอมมิตไปสู่ repo ใหม่ (ครั้งนี้คอมมิตแรกคือไฟล์ LICENSE) และยังคงเก็บข้อมูลเมตาการคอมมิตไว้หรือไม่
ใช่โดยการเพิ่มรีโมทและการเลือกเชอร์รี่ที่คอมมิตไว้ด้านบนของคอมมิตแรกของคุณ
# add the old repo as a remote repository
git remote add oldrepo https://github.com/path/to/oldrepo
# get the old repo commits
git remote update
# examine the whole tree
git log --all --oneline --graph --decorate
# copy (cherry-pick) the commits from the old repo into your new local one
git cherry-pick sha-of-commit-one
git cherry-pick sha-of-commit-two
git cherry-pick sha-of-commit-three
# check your local repo is correct
git log
# send your new tree (repo state) to github
git push origin master
# remove the now-unneeded reference to oldrepo
git remote remove oldrepo
คำตอบที่เหลือคือหากคุณยังต้องการเพิ่ม LICENSE ให้กับ repo ก่อนหน้าของคุณ
ใช่. คุณสามารถวางคอมมิต LICENSE เป็นคอมมิตแรกได้
Rebasing เป็นวิธีการจัดเรียงคำสั่งคอมมิตใหม่ในขณะที่รักษาผู้เขียนคอมมิตและวันที่คอมมิตไว้ทั้งหมด
เมื่อทำงานกับ repo ที่ใช้ร่วมกันมักจะไม่สนับสนุนเว้นแต่ว่าทั้งทีมของคุณจะใช้คอมไพล์ได้คล่อง สำหรับสิ่งที่ไม่เป็นเช่นนั้นก็สามารถโคลนสำเนาใหม่ของที่เก็บได้
นี่คือวิธีที่คุณได้รับ LICENSE คอมมิตเป็นครั้งแรก
1. อัปเดตและสร้างฐานข้อมูลสำเนาในเครื่องของคุณใหม่
ตรวจสอบโครงการของคุณและวางไฟล์ LICENSE ในคอมมิตที่ด้านบนของ 3 คอมมิตสแต็กปัจจุบันของคุณ
#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'
จากนั้นทำการ rebase แบบโต้ตอบบนสาขาหลักเพื่อจัดเรียงคอมมิตใหม่
git rebase -i --root
มันจะเปิดตัวแก้ไข ย้ายบรรทัดล่างสุด (คอมมิต "Initial คอมมิต" ซึ่งเป็นคอมมิตล่าสุด) ไปที่ด้านบนสุดของไฟล์ จากนั้นบันทึกและออกจากโปรแกรมแก้ไข
ทันทีที่คุณออกจากโปรแกรมแก้ไขคอมไพล์จะเขียนคอมมิตตามลำดับที่คุณระบุ
ตอนนี้คุณได้อัปเดตสำเนาที่เก็บในเครื่องแล้ว ทำ:
git log
เพื่อตรวจสอบ
2. บังคับให้ผลักดันสถานะ repo ใหม่ของคุณไปที่ github
เมื่ออัปเดตสำเนาของคุณแล้วคุณต้องบังคับให้ส่งไปที่ github
git push -f origin master
สิ่งนี้จะบอกให้ github ย้ายสาขาหลักไปยังตำแหน่งใหม่ คุณควรบังคับให้ผลักดันในโอกาสที่หายากเช่นนี้โดยที่ทุกคนที่ทำงานด้วยจะทราบถึงการเปลี่ยนแปลงที่รอดำเนินการมิฉะนั้นจะทำให้ผู้ทำงานร่วมกันสับสน
3. ประสานผู้ทำงานร่วมกันกับ github
สุดท้ายนี้ผู้ทำงานร่วมกันทั้งหมดจะต้องซิงโครไนซ์กับที่เก็บนี้
ก่อนอื่นพวกเขาต้องมีที่เก็บที่สะอาดเนื่องจากคำสั่งต่อไปนี้สามารถทำลายได้หากมีการเปลี่ยนแปลงที่ไม่ได้บันทึก
# make sure there are no unsaved changes
git status
# pull the latest version from github
git fetch
# move their master branch pointer to the one you published to github.
git reset --hard origin/master
แค่นั้นแหละ. ตอนนี้ทุกคนควรจะซิงค์กันแล้ว