'Master'ı' orijinal '/ master'a nasıl sıfırlarım?


203

Aşağıdakileri daha kolay bir şekilde yapabilir miyim?

git checkout origin/master
git branch -D master
git branch master
git checkout master

Bazen, bu çalışma ağacına dokunmadan yapılabilir: stackoverflow.com/a/12343727/586086
Andrew Mao

6
Lütfen kabul edilen cevabınızı güncelleyin: @ KindDragon'un cevabı daha doğru ve daha kısa.
Robert Siemer

Yanıtlar:


290

As KindDragon 'ın cevabı bahseder, sen yeniden oluşturabilirsiniz masterdoğrudan origin/masterşununla:

git checkout -B master origin/master

git checkoutAdam sayfası bahseder:

Eğer -Bverilirse, <new_branch>yoksa oluşturulur; Aksi takdirde sıfırlanır . Bu işlemin karşılığıdır.

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

Başlangıçta önerildi:

Gibi bir şey:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master

2. adım isteğe bağlı olarak.


1
Bunu bir satırla yapabilirsiniz.
Robert Siemer

89

Git bu komutu destekliyor:

git checkout -B master origin/master

Şubeye göz atın ve origin/masterşubeyi sıfırlayın master.


4
Tek doğru cevap.
Robert Siemer

3
dört tuş vuruşunu kaydedin - tırnaklara ihtiyacınız yok. Sadece: git ödeme -B ana kaynak / ana
zumalifeguard

Diyelim ki 2 şeyi taahhüt ettim, birincisi şubeyle birleşiyor, ikincisi ise düzenli. Menşe / ustaya geri dönersem birliğe ne olur?
utdev

1
güncellendiğinden git fetch origin masteremin olmak için daha önce gerek yok origin/mastermu?
pedrozath

Evet, elbette git fetchilk önce yapmanız gereken tüm çözümler
KindDragon

29

VonC'nin cevabının bile bu seçeneğe göre karmaşıklığı olduğunu düşünüyorum:

git update-ref refs/heads/master origin/master
git reset --hard master

git, bir ref'nin her değerini otomatik olarak günlüğe kaydeder (reflog üzerinden). Bu komutu çalıştırdıktan sonra master@{1}, master'ın önceki değerini ifade eder.

VonC'nin cevabı doğrudur, ancak ustanın eski değerini dosya sistemine dahil etmek için zaman harcar.

Depodaki artık nesneleri önemsiyorsanız, koşabilirsiniz git gc


1
İlginç bir alternatif geliyor. +1
VonC

Ben hala alıyorumAlready on 'master'
senin arkadaşınzak

@ yourfriendzak, ustayı güncellemeden önce ustayı kontrol etmiş olabileceğinizi unutmuşum. Cevabı, bu durumda da çalışması gereken cevap olarak güncelledim.
Alexander Bird,

Bu, usta olmasanız bile çalışır (gerçekte orijini / ustayı gösteren müstakil bir HEAD durumu gibi). Daha sonra, eski dosyaları depodan çevirmek zorunda kalmadan ana master'i kontrol edebilirsiniz. Harika!
Andrew Mao,

20

Zaten üzerindeyseniz masteraşağıdakileri yapabilirsiniz:

git reset --hard origin/master

Yerel masterşubeyi uzaktan kumandaya yönlendirir origin/masterve çalışma dizinindeki değişiklikleri atar.


Ve dosyaları silecek! Dosyaları oluşturduysanız / düzenlediyseniz ve üzerlerinde "git add" çalıştırdıysanız, bu komut onları siler. Uyarılmak.
Cheeso

Bu yaklaşım daha mı iyi git checkout -B master origin/master?
Jim Aho
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.