Bir havuzu çatalladım, sonra bazı değişiklikler yaptım ve her şeyi berbat ettim.
Çalışmamın temeli olarak mevcut yukarı akım / master'ı kullanarak sıfırdan tekrar başlatmak istiyorum.
Depomu yeniden adlandırmalı mıyım veya silmeli miyim?
Bir havuzu çatalladım, sonra bazı değişiklikler yaptım ve her şeyi berbat ettim.
Çalışmamın temeli olarak mevcut yukarı akım / master'ı kullanarak sıfırdan tekrar başlatmak istiyorum.
Depomu yeniden adlandırmalı mıyım veya silmeli miyim?
Yanıtlar:
En basit çözüm ( upstreamorijinal repo çatalını referans alan uzak ad olarak ' ' kullanarak ) olacaktır:
git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
(Bu GitHub sayfasına benzer şekilde , "Kötü bir durumdaysam ne yapmam gerekir?" Bölümü )
masterŞube üzerinde yapılan değişiklikleri kaybedebileceğinizi unutmayın (hem yerel, hem reset --hardde uzak tarafta, çünkü push --force).
Bir alternatif, taahhütlerinizi korumak istiyorsanız master, bu taahhütleri akımın üzerinde tekrar oynatmaktır upstream/master.
Sıfırlama parçasını a ile değiştirin git rebase upstream/master. O zaman hala zorla itmeye ihtiyacınız olacak.
Ayrıca bkz. " Kötü bir durumdaysanız ne yapmalıyım? "
Mevcut çalışmanızı yedekleyen daha eksiksiz bir çözüm (her ihtimale karşı) " Git ana dalını temizleme ve bazı taahhütleri yeni şubeye taşıma " bölümünde ayrıntılı olarak açıklanmıştır .
Ayrıca " " ne olduğunu göstermek için " Orijinal GitHub veri havuzundan yeni güncellemeleri çatallı GitHub veri havuzuna alma " konusuna bakın upstream.

Not: Son GitHub depoları şubeye karşı koruma sağlarmasterpush --force .
Bu yüzden masterönce korumayı kaldırmanız gerekir (aşağıdaki resme bakın) ve ardından zorla ittikten sonra yeniden korumalısınız .
Not: GitHub'da özellikle, yukarı akışta birleştirilen çekme istekleri için çatallı depoları silmek için bir kısayol var (Şubat 2019) .
git reset --hard upstream/master
git resetCevabın sözdizimini düzelttim .
git remote" komutlarına bakın .
VonC'nin cevabını seviyorum. İşte yeni başlayanlar için kolay bir sürümü.
Orada originhepiniz farkında eminim denilen bir git uzaktan var . Temel olarak, git deposuna istediğiniz kadar uzaktan kumanda ekleyebilirsiniz. Yani, yapabileceğimiz, çatal değil orijinal repo olan yeni bir uzaktan kumanda tanıtmak. Aramayı severimoriginal
Uzaktan kumanda olarak çatalımıza orijinal repoları ekleyelim.
git remote add original https://git-repo/original/original.git
Şimdi en son kodladığımızdan emin olmak için orijinal depoyu getirelim
git fetch original
VonC'nin önerdiği gibi, usta olduğumuza emin olun.
git checkout master
Şimdi çatalımızı orijinal repo'daki en son kodla hızlandırmak için, tek yapmamız gereken ana dalımızı orijinal uzaktan kumandayla uyumlu olarak sıfırlamak.
git reset --hard original/master
Ve işiniz bitti :)
fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.son adımı. Herhangi bir tavsiye?
originalyerel "yukarı akış" olduğu upstreamgibi (Github dokümanlarının kullandığı) daha iyidir . Belirsizliği azaltır. Acaba bu yüzden mi kullanıyorsun? origin/mastermaster
@VonC harika cevabını takiben. GitHub şirket politikanız master'da 'zorunlu itmeye' izin vermeyebilir.
remote: error: GH003: Sorry, force-pushing to master is not allowed.
Bunun gibi bir hata mesajı alırsanız, lütfen aşağıdaki adımları deneyin.
Çatalınızı etkili bir şekilde sıfırlamak için şu adımları izlemeniz gerekir:
git checkout master
git reset --hard upstream/master
git checkout -b tmp_master
git push origin
GitHub'da çatalınızı açın, "Ayarlar -> Şubeler -> Varsayılan şube" bölümünde yeni varsayılan şube olarak 'new_master'ı seçin. Şimdi 'ana' dalı zorlamaya zorlayabilirsiniz:
git checkout master
git push --force origin
Ardından GitHub ayarlarında 'master'ı varsayılan dal olarak ayarlamanız gerekir. 'Tmp_master'ı silmek için:
git push origin --delete tmp_master
git branch -D tmp_master
Değişikliğinizi kaybetmeyle ilgili uyarı diğer yanıtlar hala geçerlidir, dikkatli olun.
(Git komut satırı arabirimi aracılığıyla herkes bir şeyler yapmayı sevmez)
Bu ayarlandıktan sonra, bundan sonra yalnızca 7-13 arasındaki adımları uygulamanız gerekir.
Getir> ödeme ana dalı> yöneticilerine sıfırla> Değişiklikleri sunucuya aktar
Henüz kontrol edilmemişse kontrol etmek için "ana" dalınıza çift tıklayın.
Sıfırlamak istediğiniz taahhüdü bulun, repo "master" adını verdiyseniz, büyük olasılıkla üzerinde "master / master" etiketi bulunan taahhüdü bulmak isteyeceksiniz.
Tarayıma sağ tıklayın> "Geçerli dalı bu talimata sıfırla".
İletişim kutusunda, "Modu kullanma:" alanını "Tüm çalışan kopya değişikliklerini sabitle" olarak ayarlayın ve ardından "Tamam" düğmesine basın (önce kaybetmek istemediğiniz değişiklikleri ayrı bir şubeye koyduğunuzdan emin olun).
Yaptın!