2013-03-06 12 views
22

Git'i ve çekme, getirme ve birleştirme arasındaki farkı anladım. Zaman zaman izlediğim, getirdiğim ve bir araya getirdiğim bir uzaktan kumandam var. Yapmak istediğim, bir 'git getirme' davranışını tersine çevirmektir. Kulağa saçma geliyor, ama uzak izleme şubemin, eski bir duruma, son getirmeden hemen önceki eyalete işaret ettiği yeri güncellemek istiyorum. Mümkün mü?tersine git getirme

Örneğin, ...

git show origin/master # shows commit abc123 

git fetch    # yay i got something! 

git show origin/master # shows commit def456 

gizem komut böylece buraya ... Bu benim iş akışı sağlar ki

git show origin/master # shows commit abc123 

Tuhaf bir şey istemek için tür, ama ne zaman bir şey almak olduğunu belirlemek için bir git repo izler bir crontab var ve ben bu davranışa dayalı bazı eylemleri gerçekleştiren komut dosyası hata ayıklama sorunları yaşıyorum. Kökeni/efendiyi değiştirmeyi beklemek yerine, kendim değiştirmek isterdim, böylece senaryonumun hatalarını ayıklayabilirim!

echo $OLD_COMMIT > .git/refs/remotes/origin/master 

+1

Bu garip değil ... Ben sadece getirdim ve istemiyorum bir sürü değişiklik var ve ben de aynı şeyi yapmak istiyorum ... uzaktan izleme şube benim eski bir sürümüne sahip repo (almamış olsaydım). Bu değişikliklerin çalışma dizinimde olmadığını biliyorum ... Uzak izleme şubemde onları bile istemiyorum. Bu soruyu sorduğunuz için ve yanıt verebilmem için zamanında cevap aldığınız için teşekkür ederiz: -) –

cevap

14

sen

istiyorum git update-ref refs/remotes/origin/master refs/remotes/origin/[email protected]{1}

update-ref o ref-adlandırma kurallarına saygı komutları daha (çok) düşük seviyeli olduğu için bu güncelleme oluyor referansıyla ilgili tam büyü istiyor.

1

bunu yapmak için gerçek bir git komutu varsa emin değilim ve bu büyük bir hackish olmakla istediğiniz ve bunu bu olduğunu düşünüyorum:

git rebase origin/master --onto origin/master^ 
0

Ben ne var bu kez umut çalışması gerekir ...

1

Bu, "ters bir git getirme" yanıtı değildir, ancak gerçek sorununuzun, programınızı herhangi bir şekilde değiştirmeden, "değişiklikler için bir repoyu nasıl izleyeceğiniz" şeklindedir.

Bunun için git fetch --dry-run'u kullanabilirsiniz. Kuru çalışma, deponuzda herhangi bir değişikliğe neden olmaz, ancak uzaktan kumandada değişiklik olursa, bazı temel terminal çıkışları olacaktır; Eğer herhangi bir değişiklik yoksa çıktı olmaz. Bunun manuel bir kontrol yerine otomatik bir komut dosyası olarak çalışmasını istiyorsanız, çıktı için git fetch --dry-run'u test eden basit bir bash komut dosyası oluşturmak nispeten basit olmalıdır.