วิธีการรีเซ็ตที่เก็บ Git ระยะไกลเพื่อลบการกระทำทั้งหมด?


164

ฉันจะรีเซ็ตที่เก็บ Git ระยะไกลและท้องถิ่นเพื่อลบการกระทำทั้งหมดได้อย่างไร

ฉันต้องการเริ่มต้นใหม่กับหัวหน้าปัจจุบันเป็นการกระทำเริ่มต้น


เกี่ยวข้อง: stackoverflow.com/questions/495345/…
miku

ฉันไม่ต้องการรับเชอร์รี่หรือทำสิ่งใดฉันเพียงต้องการลบการเปลี่ยนแปลงทั้งหมดและรีเซ็ต repo สาธารณะด้วย ในฐานะผู้ใช้ Git ใหม่ฉันทำผิดพลาด การลบไดเรกทอรี. GIT ไม่ใช่ตัวเลือกเนื่องจากมีที่เก็บสาธารณะเช่นกัน
Priyank Bolia

คุณสามารถใช้แรงผลักดันได้ดังนั้นการลบ. git dir เป็นตัวเลือก
Lilith River

2
เพียงแค่ nitpicking แต่ "การแก้ไข" เป็นคำศัพท์ svn และไม่สมเหตุสมผลในประวัติศาสตร์ที่มีรูปร่างคล้ายต้นไม้
Tamás Szelei

2
@ TamásSzelei "Revision" เป็นคำพ้องความหมายที่ยอมรับได้อย่างสมบูรณ์สำหรับ "commit" มันใช้ทั้งในหนังสือ Pro Git (เช่นที่นี่ ) และในหน้า man Git
jub0bs

คำตอบ:


348

รีเซ็ตอย่างสมบูรณ์หรือไม่

  1. ลบ.gitไดเรกทอรีในเครื่อง

  2. สร้าง repostory คอมไพล์ใหม่:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. กดไปที่เซิร์ฟเวอร์ระยะไกลเขียนทับ โปรดจำไว้ว่าคุณจะทำให้คนอื่นยุ่งกับการทำเช่นนี้ ... คุณจะเป็นลูกค้าคนเดียวเท่านั้น

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    

1
แต่การคอมมิทจะหายไปและที่เก็บจะถูกรีเซ็ต เราสามารถลบข้อความก่อนหน้านี้ออกไปข้างหน้าชื่อไฟล์ได้หรือไม่
Priyank Bolia

2
ลบที่เก็บระยะไกลโดยตรงบน GitHub และสร้างขึ้นใหม่ที่นั่น
Bombe

1
ควรเป็น git push --force แทนที่จะเป็น git push
-force

6
หากคุณไม่ต้องการที่จะกระทำไฟล์ใด ๆ ใน "เริ่มต้นกระทำ" คุณสามารถไม่เพียงเพิ่มไฟล์ใด ๆ และเพิ่มธงในตอนท้ายของ--allow-empty git commit -m 'Initial commit'
raf

2
ใช้ Git 2.3.2 ฉันต้องใช้git push --force --set-upstream origin masterแต่สิ่งที่เหลือทั้งหมดก็ทำงานได้ตามที่อธิบายไว้
Sébastien Stormacq

6

ก่อนอื่นให้ทำตามคำแนะนำในคำถามนี้เพื่อสควอชทุกอย่างให้เป็นการกระทำเดียว จากนั้นทำการผลักดันไปยังรีโมท:

$ git push origin +master

และเลือกที่จะลบสาขาอื่น ๆ ทั้งหมดทั้งในและนอกสถานที่:

$ git push origin :<branch>
$ git branch -d <branch>

0

ฉันเป็นคุณฉันจะทำสิ่งนี้:

ก่อนทำสิ่งใดโปรดเก็บสำเนาไว้ (ดีกว่าปลอดภัยกว่าขออภัย)

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

หลังจากทำเช่นนั้นคุณสามารถลบสาขาอื่น ๆ

ผลลัพธ์: คุณกำลังจะมีสาขาที่มีเพียง 2 คอมมิชชัน

ใช้git log --onelineเพื่อดูการกระทำของคุณในแบบที่เรียบง่ายและหา SHA-1 สำหรับการกระทำ!

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