Şubeniz 3 taahhütte 'menşe / usta' nın önünde


355

Koşarken aşağıdakileri alıyorum git status

Your branch is ahead of 'origin/master' by 3 commits.

Başka bir yazı üzerinde bu düzeltmek için yolu okudum git pull --rebaseama tam olarak rebase nedir, veri kaybedecek mi veya master ile senkronize etmek için bu basit bir yol mu?


19
Bunun bir kopya olduğunu sanmıyorum ... Bu soru bunun ne anlama geldiğini sorurken, diğer soru değişiklikleri nasıl atacağınızı soruyor.
onionjake

11
Bu, birçok insan tarafından nasıl kopya olarak işaretlendi? Soru, kişinin değişikliklerini kaybetmek istemediğini açıkça gösteriyor. Değişiklikler yaptılar ve mesaj tarafından karıştırıldılar. Sözde yinelenen soru, kişinin değişikliklerini kaybetmesini sağlayacaktır.
Derek Greer

4
Söylemeliyim ki yukarıda anlatılan soru bu sorunun gerçekten bir kopyası değil ...
Dave Kanter

15
@DerekGreer: Bu nasıl kopya olarak işaretlendi? Çünkü soruları kopya olarak işaretleyen çoğu kişi soruyu gerçekten okumak ve anlamak zahmetine girmez . Yüzeysel benzerlikler varsa, ikisinin aynı olduğu sonucuna atlayacaklar ve OP ya da ilk etapta açıkça görülmesi gereken şeyleri dikkatlice tekrarlamak için zaman ayırmaya istekli olan diğerlerine bağlı olacak. dupe-hunters aslında dikkat etmeye özen göstermişti.
iconoclast

6
^ ^ ^ Uygulaması SO, IMO'yu öldürüyor.
Geek Hisse Senetleri

Yanıtlar:


771

Bu iletiyi, yerel yöneticinizde değişiklik yaptığınız ve bunları uzaktan kumandaya göndermediğiniz için alıyorsunuz. Bunu "çözmenin" birkaç yolu vardır ve normalde iş akışınızın nasıl göründüğüne bağlıdır:

  • İyi bir iş akışında, uzak ana kopyasının iyi bir kopyası olması gerekirken, yerel ana kopyasının uzaktaki bir kopyasıdır. Bu iş akışını kullanarak bu mesajı bir daha asla almayacaksınız.
  • Başka bir şekilde çalışıyorsanız ve yerel değişikliklerinizin itilmesi gerekiyorsa, sadece git push originkaynağınızın uzaktan kumanda olduğunu varsayarsak
  • Yerel değişiklikleriniz kötüyse, bunları kaldırın veya yerel yöneticinizi uzaktan kumandadaki durumuna sıfırlayın. git reset --hard origin/master

82
git reset --hard origin / master tam aradığım şey. Teşekkürler.
FluxEngine

4
@iberbeu günümü çözdün ... git reset --hard origin / master aradığım şey. + 1ed
Ravi

75
Ayrıca kaldıracağınız değişiklikleri görmek için fwiw git diff master origin/master(ie. git diff local remote)
Shanimal

1
Ben uzak kökeni / şube yerel / master öylesine kullanarak git push origin master:branchhangi kullanarak Everything up-to-date, daha sonra x taahhüt önde olma mesajı gitti gitti.
fyrye

2
Sonuncusu bana orada ihtiyacım olanı aldı!
RyanG

38

Düzeltilecek bir şey yok. Sadece 3 taahhütte bulundunuz ve henüz uzak şubeye taşınmadınız. Ne yapmak istediğinize bağlı olarak birkaç seçenek vardır:

  • git push: değişikliklerinizi uzaktan kumandaya taşıyın (uzaktan kumandada başka değişiklikler varsa bu reddedilebilir)
  • hiçbir şey yapma ve kodlamaya devam et, başka bir gün senkronize et
  • git pull: Uzaktan kumandadan değişiklikleri (varsa) alın ve değişikliklerinizle birleştirin
  • git pull --rebase: yukarıdaki gibi, ancak taahhütlerinizi uzaktan değişikliklerin üzerinde tekrarlamaya çalışın

Klasik bir durumdasınız (çoğu iş akışında genellikle master konusunda çok fazla işlem yapmazsınız). Normalde ne yapardım: Değişikliklerimi gözden geçirin. Belki de git rebase --interactiveüzerinde kozmetik yapmak için bir şeyler yapın, emenleri bırakın, daha mantıklı hale getirmek için onları yeniden sıralayın. Şimdi ile uzaktan kumandaya taşıyın git push. Yerel git pull --rebaseşubem güncel olmadığı için bu reddedilirse: en son değişikliklerin üstünde çalışmamı tekrar yapmak vegit push tekrar tekrar çalışmak.


Git pull --rebase kullandım, ama şimdi bir taahhütte olduğumu söylüyor
FluxEngine

Bu yüzden değişiklikleri yaptım, ustalaşmaya zorladım ve sonra ekibimiz liderle ustalaştı. Değişiklikler orada mevcut master ile senkronize edilmem gerekiyor.
FluxEngine

@MartyMcFly Burada neler olduğunu görmek zor. Zaten ittiğini mi söylüyorsun? Öyleyse neden hâlâ usta olmayan vaat ediyorsun? Ne demek istiyorsun your team lead merged to master? Zaten ustalaşmaya zorlandığını söylemedin mi? Ekstra taahhüt ne içeriyor? git diff origin/masterYerel şubenizin uzaktan kumandadan nasıl farklı olduğunu görmeye çalışın .
pmr

1
Yardım için teşekkürler, durumu açıklayan kötü bir iş çıkarırsam özür dilerim. Ama aradığım şey git reset --hard origin / master. Ama cevabınız yardımcı oldu +1.
FluxEngine

Bir kaya ile sert bir yer arasında sıkışmış gibi görünüyorum, değişiklikleri yapmaya çalıştım, sonra git dedi: 11 taahhütte ilerdesin. Uzak depoyu güncelleme iznim yok, bu yüzden bir itme mümkün değil. "git pull" diyor: Zaten güncel. Üçüncü önerinizi denedim ama git diyor: rebase ile çekilemiyor: Değişmemiş değişiklikleriniz var. lütfen taahhüt edin veya saklayın. Duh, ilk etapta buraya geldim :-(
Sander de Jong

36

Bu 4 basit komutu kullanın

Adım 1 :git checkout <branch_name>

Bu dalın içine girmek açıktır.

2. Adım :git pull -s recursive -X theirs

Uzak dal değişikliklerini alın ve çakışma olursa değişikliklerle değiştirin. Burada böyle bir şey git statusalırsanız, dalınız 3 komisyon tarafından 'orijin / master' ın önünde.

3. Adım :git reset --hard origin/<branch_name>

4. Adım :git fetch

Şubenizi sert sıfırlayın.

Zevk almak.


17

Bitbucket'te bir çekme isteği birleştirdikten sonra bu sorunla karşılaştım.

Yapmak zorundaydım

git fetch

ve hepsi buydu.


2
Bir paketten bir repo ile çalışıyordum ve geçerli bir pakete "git fetch" uygulayarak iletiden kurtulabildim. tnx!
Martin Meeser

Salt okunur bir kasada git durumum 2 ileride olduğumu gösterdi, günlük olması gerektiği gibi görünüyordu - hepsi başlangıçta gerçekleşiyor. Bir git çekme yaptım ve 5 taahhüt edildi ... WTF ???? Sadece yerel dizinleri yenilemek için getirmeniz gerekiyor ... hepsi iyi :)
Chris Rutledge

12

Genellikle yaptığım ustadan farklı taahhütlerin hangileri olduğunu kontrol etmek zorunda kalırsam:

git rebase -i origin/master

Bu şekilde taahhütleri görebilir ve bırakmaya veya seçmeye karar verebilirim ...


Buradaki bu düşük yanıt, yapmam gereken şeydi. Farkı nasıl bulacağımı anlayamadım ve çeşitli git diff ...sihirbazlarım işe yaramazdı. Bunu yaptığımda, bana nooptek taahhüt verdi ve kabul ettiğimde, şimdi şubem orijin / usta ile senkronize. Görünüşe göre taahhütler başlangıçtan / anadan farklıdır, hiçbir şey yoktu.
philo vivero

11

Bu mesaj, gityerel deponuzda üç taahhütte bulunduğunuz ve bunları masterdepoda yayınlamadığınız anlamına gelir . Bunun için çalıştırılacak komut git push {local branch name} {remote branch name}.

Komut git pull(ve git pull --rebase), yerel repoda olmayan uzak repoda taahhüt olduğunda diğer durum içindir. --rebaseOpsiyon aracı gitiçin yerel hareket edecek, bir kenara uzak repo ile senkronize işlemek ve sonra uygulamak için denemek senin üç yeni durumdan taahhüt. Çakışma olursa başarısız olabilir, ancak bunları çözmeniz istenir. Ayrıca rebase, kullanarak çakışmaları nasıl çözeceğinizi bilmiyorsanız iptal edebilirsiniz git rebase --abortve çalıştırmadan önce duruma geri dönersiniz git pull --rebase.


7

Gitiniz önde olduğunuzu söylüyorsa, sadece Önce

git itme kaynağı

En son çalışmanızı repoda ittiğinizden emin olmak için

Sonra,

git reset --hard başlangıç ​​/ master

Depoyu sıfırlamak ve eşleştirmek için


4

Bu, Bitbucket'te bir çekme talebini birleştirdikten sonra bana bir kez oldu.

Sadece yapmam gerekiyordu:

git fetch

Sorunum çözüldü. Umarım bu yardımcı olur!!!


0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

en sonunda:

$ git push origin
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.