Soru Yerel depo dalını tıpkı uzaktaki depoya benzetmek için sıfırlama BAŞLIĞI


Yerel şubemi, uzaktaki depodaki şube gibi nasıl sıfırlayabilirim?

Yaptım:

git reset --hard HEAD

Ama koştuğumda git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

Lütfen bana neden "değiştirilmiş" olduğumu söyler misiniz? Bu dosyalara dokunmadım mı? Eğer yapsaydım, bunları kaldırmak istiyorum.


2524
2017-10-27 00:27


Menşei


Çıktısına göre git status ikinci komuta git reset --hard HEAD başarısız oldu. Yine de, çıktılarını yapıştırmadınız. → Tamamlanmamış soru. - Robert Siemer
İki sorunu burada birleştiriyorsunuz: 1) yerel bir dalı uzaktan kumandanın bulunduğu noktaya nasıl sıfırlayacağınızı ve 2) evreleme alanınızı (ve muhtemelen çalışma dizini) nasıl temizleyeceğinizi, böylece git statusdiyor nothing to commit, working directory clean. - Lütfen belirtin! - Robert Siemer
@RobertSiemer Tam olarak istediğim bu. Yerel repo'yu uzaktaki repodaki son işlem gibi nasıl sıfırlayacağım ama aynı zamanda yerel repo'larımı temizlemek istiyorum, şu anda sahip olduğum ve uzaktan repoda olmayan değişikliklere sahip olmak istemiyorum. Sadece yerel repo'mın uzaktan kumandadakiyle aynı olmasını istiyorum. Bunu nasıl yapacağımı söyleyebilir misin? - Alex Ventura


Cevaplar:


Şubenizi uzak şube ile tam olarak eşleşecek şekilde ayarlamak iki adımda yapılabilir:

git fetch origin
git reset --hard origin/master

Bunu yapmadan önce mevcut şube durumunuzu kaydetmek isterseniz (aşağıdaki durumlarda), şunları yapabilirsiniz:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

Artık işiniz geri almak istediğinize karar verdiğinizde (daha sonra bakmak veya güncellenmiş şubenize göre değiştirmek istediğinizde) şubemde “kaydedilen işlerim” bölümüne kaydedilir.

İlk örnek, uzak repo'nun adının "origin" olduğunu ve uzak repoda "master" adlı şubenin yerel repo'nuzdaki şu anda kontrol edilen şube ile eşleştiğini varsayar.

BTW, içinde bulunduğunuz bu durum, halihazırda kontrol edilmemiş bir deponun kontrol edilen dalına bir itişin yapıldığı ortak bir durum gibi çok kötü görünüyor. Son zamanlarda yerel röportajı yaptın mı? Değilse, o zaman endişelenmeyin - başka bir şey bu dosyaların beklenmedik biçimde değiştirilmesine neden olmuş olmalıdır. Aksi halde, çıplak olmayan bir depoya (özellikle de şu anda kontrol edilen şubeye değil) itilmemenizin önerilmediğinin farkında olmalısınız.


4474
2017-10-27 01:44



Cevabınız için teşekkür ederim. “İlk örneğin uzaktaki repo'nun adının“ kökeni ”olduğunu ve uzaktaki repodaki“ ana ”adlı şubenin yerel repodaki şubeyle eşleştiğini varsadığını söyledin. 'Git reset - hard' komutunu çalıştırmadan önce emin olmak için uzak yanıtımın adını ve şube ismimi nasıl iki kez kontrol edebilirim? Tekrar teşekkürler. - hap497
Uzaktan kumandayı açık olarak isimlendirmediyseniz, adın büyük olasılıkla sadece "origin" (varsayılan) olması olasıdır. Tüm uzak adların listesini almak için "git remote" komutunu kullanabilirsiniz. Daha sonra, hangi dalların birbirleriyle ittiğini / çekildiğini görmek için "git uzak <isim>" seçeneğini kullanabilirsiniz (örneğin "ana" dalınız "kökeni" adlı uzaktaki "ana" dalından klonlanmışsa, bir satır alırsınız. "master uzak master ile birleştirir" diyor. - Dan Moulding
“çıplak olmayan bir depoya (ve şu anda kontrol edilen şubeye değil, özellikle de“ Bu neden olmasın ”tavsiye edilmez. - LeeGee
Aldıktan hemen sonra yapabileceğine inanıyorum. git reset FETCH_HEAD --hardbunun yerine, aynı anlama geliyor. - Jean
Çok kötü, sadece bir kez bunu kabul edebilirim. Bu kesin cevaba 20 kez geldim. Muhtemelen daha fazla. - frosty


Yapmam gerek (kabul edilen cevapta çözüm):

git fetch origin
git reset --hard origin/master

Bunu takiben:

git clean -f

yerel dosyaları kaldırmak için

Hangi dosyaların kaldırılacağını görmek için (onları kaldırmadan):

git clean -n -f

250
2017-12-27 06:20



Ayrıca, git clean -d -f eğer takip edilmemiş dizinler varsa. - garg
Ayrıca git clean -fdx - Swapnil Kotwal
Uzak şubenin tam kopyasını istiyorsanız git temiz -ffdx ile takip etmelisiniz. Thare'nin iki f olduğunu unutmayın. - Trismegistos
git clean -f ihtiyacım olan temel parçaydı. Teşekkürler! - dgo
temiz komutu kullanarak dikkatli olun. diğer şubelerden yok sayılan dosyaları silebilir. - mikoop


Öncelikle, önceden getirilene sıfırla HEAD karşılık gelen yukarı akış şubesi:

git reset --hard @{u}

Belirtme avantajı @{u} veya onun ayrıntılı formu @{upstream} uzak repo ve şubenin ismi açıkça belirtilmek zorunda değildir.

Ardından, gerektiğinde, ayrıca, izlenmeyen dosyaları da -x:

git clean -df

Son olarak, gerektiğinde en son değişiklikleri yapın:

git pull

119
2018-02-10 20:27



Bu kabul edilen olandan daha iyi bir yanıt gibi görünüyor, çünkü dinamik olarak her zaman statik değil, geçerli upstream dalına dinamik olarak sıfırlanır. origin/master - Jon z


git reset --hard HEAD aslında sadece son işlenen duruma sıfırlanır. Bu durumda HEAD, şubenizin BAŞINA başvurur.

Eğer birkaç işleminiz varsa, bu işe yaramaz.

Muhtemelen ne yapmak istiyorsan, orijinin başına ya da uzaktaki depoya ne diyorsan sıfırlanır. Muhtemelen sadece bir şey yapardım

git reset --hard origin/HEAD

Yine de dikkatli ol. Sabit sıfırlar kolayca geri alınamaz. Dan'in önerdiği gibi yapmak daha iyidir ve sıfırlamadan önce yaptığınız değişikliklerin bir kopyasını çıkartın.


91
2017-10-27 01:08



Cevabım Dan'in daha önce yakaladığı konusunda yanlış bir öneri vardı. Onu düzenledim, çünkü kimseyi yoldan çıkarmak istemiyorum. Orijin / master veya orijin / HEAD maddeleriyle ilgili olarak, bunun öncelikle bir getiri yapıp yapmamanıza bağlı olduğunu umuyorum. Kökeni klonladıysanız ve oldukça yaygın olduğunu düşündüğüm başka bir şubeye sahip olsaydınız, iyi bir şekilde sıfırlamalıdır. Ama tabi ki Dan haklı. - Mikael Ohlson


Yukarıdaki önerilerin tümü doğru, ancak genellikle Gerçekten mi Projenizi sıfırlayın, hatta içinde bulunan dosyaları bile .gitignore.

Ahlaki karşılığı almak proje dizini silmek ve yeniden klonlamak uzaktan kumandadan:

git fetch
git reset --hard
git clean -x -d -f

Uyarı: git clean -x -d -f olduğu dönülemez ve dosya ve verileri kaybedebilirsiniz (örneğin, göz ardı ettiğiniz şeyler .gitignore).


57
2017-07-23 17:48



Uyarı: "git clean -x -d -f" geri çevrilemez ve dosyaları ve verileri .gitignore içinde kaybedebilirsiniz - Akarsh Satija
en iyi cevap; Teşekkürler. - Bob Baxley


Soru burada iki sorunu karıştırıyor:

  1. Yerel bir dalı uzaktan kumandanın bulunduğu noktaya nasıl sıfırlanır
  2. evreleme alanınızı nasıl temizleyeceğiniz (ve muhtemelen çalışma dizini), böylece git statusdiyor nothing to commit, working directory clean.

Tek durak cevap:

  1. git fetch --prune  (isteğe bağlı) Uzak repo'nun yerel anlık görüntüsünü günceller. Diğer komutlar sadece yereldir.
    git reset --hard @{upstream}Yerel şube işaretçisini, uzaklığın anlık görüntüsünün bulunduğu yere koyar ve indeksi ve çalışma dizinini bu işlemin dosyalarına ayarlar.
  2. git clean -d --force  “Çalışma dizini temiz” demek için tıkanmayan dosyaları ve dizinleri siler.

29
2018-01-31 01:29



@{upstream} sözdizimi, varsayılan olarak gerçekleşecek şekilde ayarlanacak akış yönündedir git checkout <branchname>. - Aksi takdirde origin/<branchname>. - Robert Siemer
Eklemek -x için git clean taahhütte olmayan her şeyi (yani .gitignore mekanizmasıyla göz ardı edilen dosyalar bile) kaldırmak için. - Robert Siemer


Bu düzenli olarak karşılaştığım bir şey, ve yukarıda belirtilen Wolfgang'ın herhangi bir dalla çalışacak betiğini genelleştirdim

Ayrıca "emin misiniz" uyarısı ve bazı geri bildirim çıktıları ekledim

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

20
2017-11-09 13:01



Uzaktan kumandanın ismini almak için "git uzak" seçeneğini kullanmak isteyebilirsiniz. Bazı durumlarda, "orijin" olmayacak - Yurik


İşte en popüler cevabın ne önerdiğini otomatikleştiren bir betik. Görmek https://stackoverflow.com/a/13308579/1497139 şubeleri destekleyen geliştirilmiş bir sürüm için

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see https://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

11
2017-10-15 08:50





Uzak deponun olması şartıyla originve ilgilendiğinizi branch_name:

git fetch origin
git reset --hard origin/<branch_name>

Ayrıca, şu anki şubesini sıfırlamak için origin için HEAD.

git fetch origin
git reset --hard origin/HEAD

Nasıl çalışır:

git fetch origin Bir şeyi birleştirmeyi veya yeniden oluşturmayı denemeden en son uzaktan indirir.

Sonra git reset sıfırlar <branch_name> yeni aldığın şeye. --hard seçeneği çalışma ağacındaki tüm dosyaları dosyadaki dosyalarla eşleştirir. origin/branch_name.


11
2018-05-08 11:12





Yaptım:

git branch -D master
git checkout master

şubeyi tamamen sıfırlamak için


Not, gerekli dalı silebilmek için başka bir şubeye gitmelisiniz.


10
2018-05-14 07:48



Soruyu bir kez daha okumalısınız, uzaktan kumandayı etkileyecek bir şey yok, ama uzaktan kumanda ile aynı şeyi ayarlıyorsunuz, bu yüzden uzaktan kumanda ile hiçbir şey yapmamanız gerekiyor ve bu durum benim durumumda ve yukarısında değil. - user2846569
Uzaktan kumanda ile aynı şekilde ayarlamak isterseniz, en azından bir noktada bir getirme yapmalısınız, kabul etmiyor musunuz? - Tim Castelijns
Bunu en azından denemelisiniz ya da dokümanlar okumalısınız: kernel.org/pub/software/scm/git/docs/git-checkout.html - user2846569
Başka bir şube yok ;-) Ekstra adımın cevabınıza eklemeniz gereken bir şey olduğunu düşünüyorum ve eğer reddedersem (şu anda kilitli olduğu için şu anda kaldıramıyorum) - Tim Castelijns
Yani geçici bir tane oluşturun. - qaisjp