วิธีผลักดันสาขาใหม่ที่ไม่มีประวัติ


97

ฉันมี git repo ที่มีสองสาขาที่ไม่เกี่ยวข้องกันหลักและการกำหนดค่า ฉันได้สร้างการกำหนดค่าล้างไฟล์ทั้งหมดแล้ววางไว้ในไฟล์กำหนดค่าเท่านั้น ตอนนี้ฉันต้องการผลักดันสิ่งนี้ใน repo ระยะไกล แต่เนื่องจากเป็นสาขาใหม่ที่ว่างเปล่า (โดยไม่มีบันทึกการเปลี่ยนแปลงทั้งหมดของฉันและการแก้ไขสาขาเดิมของฉัน)

ฉันจะล้างประวัติทั้งหมดและผลักดันมันได้อย่างไร?


3
ลักษณะนี้คล้ายกันมาก: stackoverflow.com/questions/1384325/…
Mark

คำตอบ:


159

การล้างไฟล์ทั้งหมดไม่ได้เป็นการกำจัดประวัติ คุณต้องสร้างสาขาที่ไม่มีประวัติก่อนและเพิ่มไฟล์กำหนดค่าของคุณ วันนี้git checkoutมี--orphanตัวเลือกที่ทำให้สาขาที่ไม่มีประวัติ นี่คือข้อมูลเกี่ยวกับ--orphanตัวเลือก:

--orphan <new_branch>

สร้างสาขา orphan ใหม่ชื่อ <new_branch> เริ่มจาก <start_point> และเปลี่ยนไปใช้ การกระทำครั้งแรกที่เกิดขึ้นในสาขาใหม่นี้จะไม่มีผู้ปกครองและจะเป็นรากฐานของประวัติศาสตร์ใหม่ที่ตัดการเชื่อมต่อจากสาขาอื่น ๆ ทั้งหมดและกระทำ

ดัชนีและโครงสร้างการทำงานจะถูกปรับให้เหมือนกับว่าคุณเคยเรียกใช้ "git checkout <start_point>" มาก่อน สิ่งนี้ช่วยให้คุณสามารถเริ่มต้นประวัติใหม่ที่บันทึกชุดของเส้นทางที่คล้ายกับ <start_point> โดยเรียกใช้ "git คอมมิต -a" เพื่อให้ root คอมมิต

สิ่งนี้จะมีประโยชน์เมื่อคุณต้องการเผยแพร่ต้นไม้จากการคอมมิตโดยไม่ต้องเปิดเผยประวัติทั้งหมด คุณอาจต้องการทำเช่นนี้เพื่อเผยแพร่สาขาโอเพนซอร์สของโครงการที่มีโครงสร้างปัจจุบัน "สะอาด" แต่ประวัติเต็มมีบิตโค้ดที่เป็นกรรมสิทธิ์หรือมีภาระผูกพัน

หากคุณต้องการเริ่มต้นประวัติที่ไม่ได้เชื่อมต่อซึ่งบันทึกชุดของเส้นทางที่แตกต่างจาก <start_point> โดยสิ้นเชิงคุณควรล้างดัชนีและแผนผังการทำงานทันทีหลังจากสร้างสาขา orphan โดยเรียกใช้ "git rm -rf " จากระดับบนสุดของแผนผังการทำงาน หลังจากนั้นคุณจะพร้อมที่จะเตรียมไฟล์ใหม่ของคุณเปลี่ยนผังการทำงานใหม่โดยการคัดลอกจากที่อื่นแยก tarball ฯลฯ

นี่คือการเชื่อมโยงไปยังเอกสารสำหรับการเช็คเอาท์ คุณยังสามารถวิ่งได้git help checkoutอีกด้วย

เมื่อคุณสร้างสาขาโดยไม่มีประวัติแล้วเมื่อคุณส่งไปที่เซิร์ฟเวอร์ก็จะไม่มีประวัตินั้นเช่นกัน FWIW ช่วยให้ฉันคิดว่าgit push"ทำให้สาขาระยะไกลดูเหมือนสาขาในพื้นที่ของฉัน" ดังนั้นหากคุณมีประวัติและผลักดันก็จะมีประวัติ ถ้าคุณทำไม่ได้สาขาที่ผลักดันจะไม่


40

ฉันจะล้างประวัติทั้งหมดและผลักดันมันได้อย่างไร?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

จากนั้นคุณสามารถเรียกใช้ไฟล์

git push <remote-name> <branch-name>


cf. ซับเดียวนี้


17

ฉันต้องทำสิ่งนี้เพื่อส่งโค้ดฟรีให้กับ freelancer โดยไม่ต้องแชร์ข้อมูลส่วนตัวหรือลบประวัติของฉัน

ในกรณีที่คุณใช้ SourceTree นี่คือวิธีที่ฉันจัดการได้ โปรดแจ้งให้เราทราบหากฉันทำอะไรผิดพลาดหรือกำลังลืมบางสิ่งเนื่องจากฉันไม่คุ้นเคยกับการจัดการการควบคุมแหล่งที่มา

  1. ฉันไปที่ปุ่มเทอร์มินัลบนแผนผังต้นทาง
  2. ฉันสร้างสาขา 'orphan' ใหม่โดยใช้คำสั่ง: 'git checkout --orphan clean-ver' โดยที่ clean-ver คือชื่อสาขาของฉัน
  3. ฉันปิดเทอร์มินัลและเห็นว่าบันทึกการคอมมิตของฉันถูกล้างเนื่องจากฉันอยู่ในสาขาเด็กกำพร้าแห่งใหม่ ฉันจัดเตรียมซอร์สโค้ดทั้งหมดของฉันและทำการเปลี่ยนแปลง
  4. ฉันตั้งค่าที่เก็บ bitbucket ของฉันในที่เก็บ> เพิ่มรีโมตหรือที่เก็บ> การตั้งค่าที่เก็บ> เพิ่ม
  5. ฉันปิดมันและคลิกที่ปุ่มกด
  6. ฉันเลือกสาขา 'clean-ver' ใหม่ของฉันว่าโอเค

เมื่อฉันตรวจสอบ bitbucket ดูเหมือนว่าสิ่งนี้ดูเหมือนจะใช้งานได้และทิ้งประวัติการกระทำของฉันไป

หวังว่านี่จะช่วยใครบางคนได้

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