Git push hiçbir şey yapmaz (her şey güncel)


105

GitHub'da bir Git deposunu güncellemeye çalışıyorum. Bir sürü değişiklik yaptım, ekledim, taahhüt ettim ve bir git push. Cevap bana her şeyin güncel olduğunu söylüyor, ama açıkça değil.

git remote show origin

beklediğim depo ile yanıt veriyor.

Depoda görünmeyen yerel kayıtlar varken Git bana neden deponun güncel olduğunu söylüyor?

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)

Ayrıca doğru dala ittiğinizden emin olun.
Brian

Yanıtlar:


145

git pushtüm yerel şubelerinizi zorlamaz: onları hangi uzak şubelere yönlendireceğini nasıl bilecek? Yalnızca belirli bir uzak dala göndermek üzere yapılandırılmış yerel dalları iter.

Git sürümümde (1.6.5.3), çalıştırdığımda git remote show originaslında hangi dalların push için yapılandırıldığını yazdırıyor:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

S. Ama mastertüm bunlar hakkında endişelenmeden zorlayabilirim !

Siz git clone, varsayılan olarak, yerel masterşubenizi uzaktaki masterşubeye (yerel olarak anılır origin/master) itecek şekilde ayarlar , böylece yalnızca taahhütte bulunursanız master, basit bir git pushdeğişiklik her zaman değişikliklerinizi geri iter.

Ancak, gönderdiğiniz çıktı parçacığından, adında bir developdaldasınız ve tahminimce hiçbir şeye aktarılacak şekilde ayarlanmamışsınız. Yani git pushargümanlar olmadan bu dalda taahhütleri zorlamaz.

"Her şey güncel" dediği zaman, "bana nasıl iteceğimi söylediğin tüm şubeler güncel" anlamına gelir.

S. Öyleyse taahhütlerimi nasıl zorlayabilirim?

Yapmak istediğiniz şey, değişikliklerinizi developiçine koymaksa origin/master, muhtemelen bunları yerelinizle birleştirip mastersonra itmelisiniz:

git checkout master
git merge develop
git push             # will push 'master'

İstediğiniz şey developuzaktan kumanda üzerinde bir dal oluşturmaksa, ondan ayırın master, ardından şu argümanları sağlayın git push:

git push origin develop

Bu, uzaktan çağrılan yeni bir şube oluşturacaktır develop; ve bu şubeyi yerel developşubenizle güncel hale getirin ; ve set developiçin itmek origin/develop, böylece gelecekte git pushargümanlar olmadan olacaktır itmek developotomatik.

Yerel adresinizi dışında başka birdevelop şey denen uzak bir şubeye göndermek istiyorsanız, şunu söyleyebilirsiniz: develop

git push origin develop:something-else

Ancak, bu form gelecektedevelop her zaman zorlanacak şekilde ayarlanmayacaktır origin/something-else; tek seferlik bir operasyon.


Çok teşekkürler, git itme kaynağınız gelişiyor: başka bir şey, bir süredir alamadığım soruya cevap verdi.
Antroid

1
Benim durumumda git push origin xhala gelecekte itilecek x dalı ayarlamıyordu. Git'in .gitconfig [remote "origin"]davranışına neden olan bölümdeki belirli bir pushspec'ten kaynaklanıyordu .
Raman

Sadece git push originbende bu sorunu yaşadım, örneğinizi kullanarak git push origin developve ana git push origin master
şubeme

28

Bu bana SourceTree uygulamam hazırlama sırasında çöktüğünde oldu. Ve komut satırında, önceki git addbozulmuş gibi görünüyordu . Bu durumda şunu deneyin:

git init
git add -A
git commit -m 'Fix bad repo'
git push

Son komutta, dalı ayarlamanız gerekebilir.

git push --all origin master

Herhangi bir dallanma veya bu türden herhangi bir şey yapmadıysanız, bunun yeterli olduğunu unutmayın. Bu durumda, gibi doğru dala ittiğinizden emin olun git push origin develop.


15

Deneyin:

git push --all origin

bu, taahhütleri bir şubeden ana şubeye değil, repodaki şubeleri ayırmaya iter.
Sreedevi J

13

Lütfen son işleme gitmeyi deneyin ve sonra yapın git push origin HEAD:master.


1
Bu gerçekten işe yaradı. Neden işe yaradığını açıklamak ister misiniz ?
René Nyffenegger

Dokümanlardan metin:Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
uruapanmexicansong

Benim için de çalıştı
Jerad Rutnam

Depomun nasıl yapılandırıldığını karşılaştırdım ve tüm şubeler aynı görünüyordu. Oysa ben sadece kullanamadı bir dalında git push: / Bu benim için de çalıştı: git push origin HEAD:my_branch_name.
iaforek

6

Benim durumum için başka hiçbir çözüm işe yaramadı. Yeni değiştirilmiş dosyaların yedeğini almak zorunda kaldım (ile gösterilen git status) ve bir git reset --hard. Bu, uzak sunucuyla yeniden hizalamama izin verdi. Yeni değiştirilmiş dosyalar ekleme ve çalıştırma

git add .
git commit -am "my comment"
git push

Hile yaptım. Umarım bu, "son şans" çözümü olarak birine yardımcı olur.


4

Şu anda, geliştirme dalındaymışsınız gibi görünüyor. Menşeinizde bir geliştirme şubeniz var mı? Değilse, deneyin git push origin develop. git pushkökeninizde bir geliştirme dalı olduğunu öğrendiğinde çalışacaktır.

Daha fazla okurken git-push man sayfalarına , özellikle de örnekler bölümüne bir göz atacağım .


4

Spesifik olmak gerekirse, bir şeyi ustalaşmak için birleştirmek istiyorsanız, aşağıdaki adımları takip edebilirsiniz.

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

Çekme isteği modelindeki yaygın bir uygulamadır, yeni bir yerel dala oluşturma ve ardından bu dalı uzak noktaya itme. Bunun için, değişikliklerinizi uzaktan nereye itmek istediğinizi belirtmeniz gerekir. Bunu, itme sırasında uzaktan kumandadan bahsederek yapabilirsiniz.

git push origin develop // It will create a remote branch with name "develop".

Yerel şube adınızdan başka bir şube oluşturmak istiyorsanız, bunu aşağıdaki komutla yapabilirsiniz.

git push origin develop:some-other-name

2

Sam Stokes sayesinde. Cevabına göre problemi farklı bir şekilde çözebilirsiniz (ben bu şekilde kullandım). Geliştirme dizininizi güncelledikten sonra onu yeniden başlatmalısınız

git init

Ardından, uzmanlaşmak için güncellemeleri işleyebilir ve aktarabilirsiniz


1
Teşekkürler! Benim durumumda, yazın: git initve yeni bir komut sekmesi açın, şunu yazın:git push origin branch_name
s7ven

2

Bu , GitHub ^Ca ortasındayken başıma geldi git push. Ancak GitHub, değişikliklerin yapıldığını göstermedi.

Düzeltmek için çalışma ağacımda bir değişiklik yaptım, taahhüt ettim ve sonra tekrar ittim. Mükemmel çalıştı.


2

Bu bana oldu. Sadece değişiklikleri yeniden yaptım ve sonra zorladı.


2

Burada tanımlananlar dahil birçok yöntemi denedim. Bende ne var

  • Depo adının geçerli olduğundan emin olun. En iyi yol, bağlantıyı depo sitesinden kopyalayıp git bash'a yapıştırmaktır.

  • Seçilen dosyaları kaydettiğinizden emin olun.

    git commit -m "Your commit here"
    
  • Her iki adım da işe yaramazsa deneyin

    git push -u -f origin master


1

Bunun yerine aşağıdakileri deneyebilirsiniz. Gitmek zorunda değilsin master; değişiklikleri doğrudan şubenizin kendisinden zorlayabilirsiniz.

Yukarıda açıklandığı gibi, bir geri ödeme yaptığınızda şubenizin geçmişini değiştirmiş olursunuz. Sonuç olarak, git pushbir yeniden temelden sonra normal bir işlem yapmaya çalışırsanız , Git, sunucudaki kaydetmeden şubenizdeki kaydetmeye doğrudan bir yol olmadığı için bunu reddeder. Bunun yerine, Git'e evet, ne yaptığınızı gerçekten bildiğinizi söylemek için -fveya --forceişaretini kullanmanız gerekecek . Zorla itme yaparken, push.defaultyapılandırma ayarınızı Git 2.0'da varsayılan olan basit olarak ayarlamanız şiddetle tavsiye edilir . Yapılandırmanızın doğru olduğundan emin olmak için şunu çalıştırın:

$ git config --global push.default simple

Doğru olduğunda, şunu çalıştırabilirsiniz:

$ git push -f

Ve çekme isteğinizi kontrol edin. Güncellenmelidir!

Daha fazla ayrıntı için Çekme İsteğini Yeniden Oluşturma bölümünün altına gidin .


0

Bu, yeni bir şubeden itmeye çalıştığımda ve git push origin masteronun yerine kullandım kez başıma geldi . Şunlardan birini yapmalısınız:

  • Kullanın: git push origin your_new_branchBu dalın uzak depoda da oluşmasını istiyorsanız.
  • Aksi takdirde, ana şubenizin birleştirme işlemine göz atın ve ardından master'dan git repo'ya itin git merge origin master.

Özet: Buradaki nokta, git merge için ikinci parametrenin neresinde sunduğunuzu kontrol etmeniz gerektiğidir . Yani eğer master'daysanız, ikinci parametre olarak master'ı kullanın, eğer new_branch içindeyseniz, bu şubeyi uzak depoda tutmak istiyorsanız, ikinci parametre olarak kullanın, aksi takdirde yukarıdaki ikinci seçeneği tercih edin.



-6
git push origin master

Neden bu kadar çok kötü oy kullandığını bilmiyorum, bu benim için işe yarayan şeydi git itme kaynağı ustası, git itme kaynağı tek başına işe
yarıyormuş
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.