git push yerel değişikliklerim olmasına rağmen "her şey güncel" diyor


238

Uzak bir gitosis sunucusu ve yerel git deposu var ve kodumda büyük bir değişiklik yaptığımda, değişiklikleri o sunucuya da göndereceğim.

Ancak bugün, bazı yerel değişikliklerim olmasına ve yerel depoya bağlı kalmamıza rağmen, çalıştırırken git push origin master'Her şey güncel' diyor, ancak git cloneuzak sunucudaki dosyaları teslim almak için kullandığımda , en son değişiklikleri içermediğini görüyorum. . Ve "master" adında sadece bir şubem ve "origin" adında bir uzak sunucum var.

Not: Git çalışırken görüntülenen budur ls-remote, yardımcı olup olmadığından emin değilim

$ git ls-remote origin
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/heads/master
$ git ls-remote .
49c2cb46b9e798247898afdb079e76e40c9f77ea        HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/heads/master
df80d0c64b8e2c160d3d9b106b30aee9540b6ece        refs/remotes/origin/master
3a04c3ea9b81252b0626b760f0a7766b81652c0c        refs/tags/stage3


Doğru dizinde olduğunuzu kontrol etmeye değer! Esp. Eğer alt modülleriniz varsa ebeveynin git yanıtları yanlış olabilir ..
geotheory

Benim durumumda commitfark etmediğim ve kodu itmeye çalıştığımda hata
alıyordum

3
taahhüt etmeyi unuttun mu?
ldgorman

Yanıtlar:


256

Herhangi bir şans eseri ayrılmış bir kafa ile mi çalışıyorsunuz ?

De olduğu gibi:

müstakil kafa

son taahhüdünüzün bir şube başı olmadığını belirtir.

Uyarı : aşağıdakiler aşağıdakileri yapar git reset --hard: geçerli olarak git stashdeğiştirilmiş dosyalarınızı kaydetmek istiyorsanız önce kullandığınızdan emin olun .

$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>

git checkoutMan sayfasında belirtildiği gibi (vurgu mayın):

Şubelerinizden birinin ucunda olmayan bir taahhüdü kontrol etmek bazen yararlı olabilir .
Bunun en açık örneği, etiketli bir resmi çıkış noktasında taahhüdü kontrol etmektir, örneğin:

$ git checkout v2.6.18

Git önceki sürümleri buna izin ve kullanma geçici şube oluşturmak istedi etmedi -bseçeneği, ancak 1.5.0 sürümünden başlayarak, yukarıdaki komutu ayırır HEADetiketi ile adlandırılmış kesinleştirme doğrudan puan geçerli şubesinden ve ( v2.6.18içinde yukarıdaki örnek).

Bu durumdayken tüm git komutlarını kullanabilirsiniz. Örneğin, daha fazla hareket etmek
için kullanabilirsiniz git reset --hard $othercommit.
Ayrı bir HEAD'ın üstünde değişiklik yapabilir ve yeni bir taahhüt oluşturabilirsiniz .
Düğmesini kullanarak bir birleştirme bile oluşturabilirsiniz git merge $othercommit.

HEAD'ınız sökülmüş durumdayken bulunduğunuz durum herhangi bir branş tarafından kaydedilmez (bu doğaldır - herhangi bir branşta değilsiniz).
Bunun anlamı, varolan bir şubeye (örneğin git checkout master) geri dönerek geçici taahhütlerinizi ve birleştirmelerinizi atabileceğinizdir ve daha sonra git pruneveya git gcçöpleri toplarsınız.
Bunu yanlışlıkla yaptıysanız, HEAD için reflog'u bulunduğunuz yerde isteyebilirsiniz, ör.

$ git log -g -2 HEAD

4
Bu duruma nasıl geldiğimi tam olarak belli değil (şu anda git-svn ile biraz mucking yapıyor), ama bu beni doğru yere geri getirmek için yeterliydi. Teşekkürler.
Christopher Schmidt

Ben müstakil bir haldeyim, değişikliklerimi birleştirdim, değişikliklerimi yaptım ve şimdi bunu Üstat'a itmek istiyorum ve bana "her şeyi güncel" söyleyemem. Ama Gitlab'ımın verdiği talimatları izliyorum: Step 1: git fetch origin git checkout -b "nodeAPI" "origin/nodeAPI" Step 2. Review the changes locally Step 3. Merge and fix conflicts git fetch origin git checkout "origin/master" git merge --no-ff "nodeAPI" Step 4. Push the result of the merge to GitLab git push origin "master" Son adıma kadar iyiyim. Ama şimdi nasıl ilerleyeceğime kafam karıştı.
John

@John İtmek için bir dalda olmanız gerekiyor. Müstakil HEAD modunda olduğunuz sürece bu işe yaramaz. Şubenizi bulunduğunuz yere sıfırlayın: git branch -f myBranch HEADardından söz konusu şubeyi kontrol edin ve itin. Sizin durumunuzda, birleştirme sürecindeyseniz myBrancholabilir . masternodeAPI
VonC

Lütfen bu komutu çalıştırdıktan sonra her yerel değişikliği kaybetmekten kaçının !! Böyle bir şey yapmadan önce bazı git stash ve kod yedekleme yapmayı düşünün.
kta

@kta İyi bir nokta: Bu uyarıyı görünür kılmak için cevabı düzenledim.
VonC

152

Hata .. Eğer git çaylak iseniz daha git commitönce olduğundan emin misiniz git push? Bu hatayı ilk kez yaptım!


10
Öyleydi git commit -a -m "your message goes here"benim durumumda
aexl

Github'a yeni bir proje eklemek istediğim her seferinde SEVİYORUM (alay) bazen unutuyorum ve hata mesajı beni gerçekten yanlış bir şey yaptığımı düşündürüyor - o zaman tabii DUH! taahhüt Sadece bana yeni yedekleme havuzları oluşturulduğunda ve unutuyorum
Tom Stickel

git noob burada - itmeden önce her lanet zamanı taahhüt etmeyi unutma - daha önce yapmamışsanız itme otomatik olarak taahhüt edilmelidir
FoxMcCloud

2
@FoxMcCloud uygulanıyor bilincinde olmak önemli bir adımdır, ben zaten :) ~ değil varsa bunu sevmeyi öğreneceksiniz eminim git add -A, git diff --staged, değişikliklere kaydırır görünümlü Hmm çok iyi, git commit -m 'bam!',git push
AFOC

58

Belki yeni bir yerel şubeyi itiyorsunuzdur?

Yeni bir yerel şube açıkça itilmelidir:

git push origin your-new-branch-name

Git ile ilgili bunlardan sadece bir tanesi ... Bir repoyu klonluyorsun, bir dal yapıyorsun, bazı değişiklikler yapıyorsun, itiyorsun ... "Her şey güncel". Neden olduğunu anlıyorum, ancak bu iş akışı yeni gelenler için son derece düşmanca.


3
Teşekkürler! Bu durum, sahip olduğum yeni bir şubeyle "her şey güncel" sorunumu düzeltti
Pangu

"Yeni şube adınız" ne anlama geliyor? Ps: Yeni gelenler hakkında haklısın.
www-0av-Com

@ user1863152, oluşturduğunuz yeni yerel şubenin adıdır. Bunu yapmadığınız anlaşılıyor, bu yüzden diğer yanıtları buradan kontrol edin.
Roman Starkov

"Bu iş akışı yeni gelenler için son derece düşmanca". 1 saatten beri bununla mücadele ediyorum. Uzak ve yerel depoyu ayarladım. Yerel REAME dosyasında değişiklik yaptı ve uzaktan kumandaya itmeye çalışın ve uzaktan kumandada hiçbir şey değişmedi.
Vir


28

Dikkat edilmesi gereken diğer bir durum: git için varsayılan durum türü "ana" dalında çalışmanızdır. Ve birçok durumda, ana çalışma kolunuz olarak bununla takılırsınız (ancak bazı insanlar süslenir ve başka şeyler yaparlar).

Her neyse, bu sadece bir dal. Bu yüzden içine girebileceğim bir durum:

Aktif şubem aslında ana dal değil. ... Ama alışkanlık olarak şu komutu yapıyorum: git push(ve daha önce yapmıştım git push origin master, bu yüzden bu bir kısayol).

Bu yüzden, ana dalı alışkanlıkla paylaşılan repoya itiyorum ... bu muhtemelen iyi bir şey, benim durumumda ...

Ama üzerinde çalıştığım değişikliklerin henüz ana dalda olmadığını unutmuşum !!!

Bu yüzden her denediğimde git pushve "Her şey güncel" diye görüyorum, çığlık atmak istiyorum, ama tabii ki git'in hatası değil! Bu benim.

Bunun yerine, dalımı ustayla birleştiriyorum ve sonra itiyorum ve her şey tekrar mutlu.


Ben de çığlık atmak istedim, ama sonra, kurtuluşu yolunu vaaz ettin, hırsızı efendiyle birleştirmek için ve sonra git push.
Aaron C

16
$ git push origin local_branch:remote_branch

açıklama

Aynı hatayı aldım ve anlamaya çalışarak saatler geçirdim. Sonunda buldum. Bilmediğim şey, böyle itmenin git push origin branch-xbranş-x'i yerel olarak aramaya ve sonra uzak-dal-x'e itmeye çalışmasıdır.

Benim durumumda, iki uzak URL'm vardı. Ben yerel x uzak x y itmeye çalışırken şube-x den şube-y bir ödeme yaptım Ben her şeyi güncel ikinci mesajı x için itiyordu çünkü normal olduğunu mesajı vardı.

Bu tür tuzağa düşmemek için uzun hikaye kısa kaynak ref ve hedef ref belirtmeniz gerekir:

$ git push origin local_branch:remote_branch

Güncelleme:

Şubenizi her bastığınızda bu komutu çalıştırmanız gerekiyorsa, yerel ve uzak dalınız arasındaki yukarı akışları aşağıdakilerle ayarlamanız gerekebilir:

$ git push --set-upstream origin local_branch:remote_branch

Veya

$ git push -u origin local_branch:remote_branch

'git push upstream dev: master' Bu, kaynağı dev'den master'a ileteceği anlamına gelir. Sağ?
Dhaduk Mitesh

Bu bana yardımcı oldu, uzak şube olarak adlandırılan başka bir yerel şubem vardı, bu da karışıklığa neden oldu.
Hubert Kubiak

Tamam, bu kesinlikle benim için çalışıyor ama bunu uzaktan kumandaya her itmek istediğimde yapmak zorundayım. Bunu bir kez ve herkes için nasıl düzeltirim?
SamuraiJack

yerel ve uzak dalınız arasındaki yukarı akışları aşağıdakilerle ayarlamanız gerekebilir: $ git push --set-upstream origin local_branch: remote_branch
Melchia

6

Yukarıdaki VonC'nin cevabına bakın - Fazladan bir adıma ihtiyacım vardı:

$ git log -1
- note the SHA-1 of latest commit
$ git checkout master
- reset your branch head to your previously detached commit
$ git reset --hard <commit-id>

Bunu yaptım, ancak daha sonra denediğimde git push remoterepo master, "hata: bazı referansları iletemedi. Geçmişinizi kaybetmenizi önlemek için, hızlı ileriye dönük güncellemeler reddedildi, Uzaktan değişiklikleri birleştirin (örn. 'Git pull') "

Bu yüzden 'git pull remoterepo master' yaptım ve bir çatışma buldu. git reset --hard <commit-id>Yine yaptım , çakışan dosyaları bir yedekleme klasörüne git pull remoterepo masterkopyaladım, tekrar yaptım , çakışan dosyaları projeme geri kopyaladım git commit, sonra yaptım git push remoterepo masterve bu sefer işe yaradı.

Git, 'her şey güncel' demeyi bıraktı - ve 'hızlı ileri' hakkında şikayet etmeyi bıraktı.


3

Benzer bir durumla karşılaştım; değişiklikleri yaptığımda ve denediğimde git push origin master, her şeyin güncel olduğunu söylüyordu.

Ben gerekiyordu git adddeğişen dosyanın ardından git push origin master. O andan itibaren çalışmaya başladı.


4
Eklemeden git commitönce bu eklenmiş dosyaya gerek kalmaz mı ?
David Harkness

3

Git statünüzden, muhtemelen benimkinden farklı bir durumunuz var.

Her neyse, işte başıma gelenler .. Aşağıdaki hatayla karşılaştım:

fatal: The remote end hung up unexpectedly
Everything up-to-date

Buradaki daha bilgilendirici mesaj, uzaktan kumandanın telefonu kapatmasıdır. Http sonrası arabellek boyutunu aşması nedeniyle ortaya çıktı. Çözüm,

git config http.postBuffer 524288000


3

Bugün bu sorunu yaşadım ve diğer cevaplarla hiçbir ilgisi yoktu. İşte yaptım ve nasıl düzelttim:

Bir depom yakın zamanda taşındı, ancak yerel bir kopyam vardı. Yerel "usta" şubemden ayrıldım ve bazı değişiklikler yaptım - ve daha sonra havuzun taşındığını hatırladım. kullandımgit remote set-url origin https://<my_new_repository_url> yeni URL'yi ayarlamak ama İtildiğinde sadece "tarihe Everything kadar" demek yerine usta benim yeni şube iterek olacaktır.

Ben üzerine basma origin/masterve sonra böyle açık şube isimleri ile iterek çözme sona erdi :

$ git rebase <my_branch> origin/master
$ git push origin <my_branch>

Umarım bu aynı problemi yaşayan herkese yardımcı olur!


3

Çok nadir - ama yine de: Windows'ta, paketlenmiş ref'lerin bir harfli bir kolu (yani dev / mybranch), refs ise klasörü ise core.ignorecase true olarak ayarlandığında başka bir vakası (yani Dev / mybranch) olabilir. .

Çözüm, ilgili satırı paketlenmiş referanslardan manuel olarak silmektir . Daha temiz bir çözüm bulamadık.


Bu benim için de bir konuydu. .Git klasörü (günlükler / refs / kafalar, refs / kafalar) içinde yanlış büyük / küçük harf içeren klasörlerin yeniden adlandırılmasıyla sona erdi.
Alexey Solonets

2

Github'da bir şubeyi birleştirdiğimde ve yerel olarak gelişmeye devam ettiğimde kendimle karşılaştım. Benim düzeltmem önerilen diğerlerinden biraz farklıydı.

Önce eski yerel şubemden yeni bir yerel şubeye daltım (itemedim). Sonra yeni yerel şubeyi kaynak sunucuya (Github) ittim. yani

$ git checkout -b newlocalbranch oldlocalbranch
$ git push origin newlocalbranch

Bu, oldlocalbranch yerine newlocalbranch da olsa Github'da görünecek değişiklikleri aldı.


2

Benim durumumda 2 uzak depo vardı.

git remote -v
originhttps https://asim_kt@...
originhttps https://asim_kt@...
origin  ssh:git@bitbucket.org:...
origin  ssh:git@bitbucket.org:...

Her iki repo da aynıydı. Sadece biri httpsöyleydi ssh. İstenmeyen kaldırmakla Yani (Benim durumumda ssh. Kullandım beri httpsnedeniyle sshçalışma değildi!) Benim için sorun giderilmiştir.


2

Benim hatam şimdiye kadar bahsettiğim her şeyden farklıydı. Neden müstakil bir kafanız olduğu hakkında hiçbir fikriniz yoksa, muhtemelen yoktur. Birlikte otomatik pilotta çalıştığı git commitve git pushve çıktı okumamıştım git commit. Anlaşıldı, bir hata mesajı oldu çünkü -am unuttum.

[colin] ~/github/rentap.js [master] M % git commit 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'
error: pathspec 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers' did not match any file(s) known to git.
[colin] ~/github/rentap.js [master] M % git push
Enter passphrase for key '/home/colin/.ssh/id_ecdsa': 
Everything up-to-date

-amGenellikle yaptığım yere koyarak düzeltildi :

[colin] ~/github/rentap.js [master] M % git commit -am 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'

2

Aynı sorunla karşılaştım. Aşama alanına değişiklik eklemediğim için. Ve doğrudan komut kullanarak uzaktan repo kodu itmeye çalıştı:

git push origin master

Ve mesajı gösterir Everything up-to-date.

bu sorunu gidermek için şu adımları deneyin

  1. git add .
  2. git commit -m "Bug Fixed"
  3. git push -u origin master

1

Uzak URL'nizi geçersiz kılmadığınızı doğrulayın.

Sadece Git'i yerel bir Jenkins derleme yapılandırmasında CVS olarak etkinleştirdikten sonra bununla karşılaştığımı belirtmek istedim. Jenkins, şubeye verdiğim şubenin en son taahhüdünü kontrol etti ve uzaktan kumandayı repoya verdiğim yollara karşılık gelecek şekilde sıfırladı. Benim özellik şube tekrar ödeme ve 'git remote set-url' ile benim kökeni uzaktan url düzeltmek zorunda kaldı. Bir oluşturma aracını çalışma dizininize yönlendirmeyin, aksi takdirde kötü bir zamanınız olur. Uzaktan kumandam çalışma dizinimin bir dosya yoluna ayarlandı, bu yüzden aynı kaynak ve hedefle değişiklikleri zorlamaya çalıştığımda her şeyi güncel olarak doğal olarak bildirdi.


1

Başka bir olasılık, .gitignore dosyanızda hariç tutulan bir dizini adlandırmış olmanızdır. Yani yeni taahhütler zorlanmayacaktı. Bana "arama" yı görmezden gelmek için bir dizin adını verdim, ama bu aynı zamanda kaynak ağacımdaki bir dizindi.


1

Bulduğum hızlı bir yol var. .Git klasörünüze gidin, HEADdosyayı açın ve hangi dalda olursanız olun master olarak değiştirin. Referans:refs/heads/master


Aslında havuzumu kırmak için ayarlıyorum refs/heads/master. Ama BAŞ olduğu düşünülen onu kesinleştirme ayarı şu mesajı verdi: Warning: you are leaving 1 commit behind, not connected to any of your branches. Taahhüdü yeni bir dalda devralabildim ve onu efendiyle birleştirebildim.
schmijos

1

Aynı sorunu yaşadım. Benim durumumda, aynı uzaktan kumandanın isimleri olması gerekiyordu. Standart 'orijini' yarattı, ama uzun süredir uzaktan kumanda olarak 'github' kullanıyorum, bu yüzden de oradaydı. 'Orijini' uzaktan kumandayı kaldırır kaldırmaz hata ortadan kalktı.


1

Bu oldu (git günlüğümde taahhütler gitHer her şey güncel olduğunu söyledi bile GitHub üzerinde değildi) ve sorunun Github olduğuna eminim. Git'te herhangi bir hata mesajı almadım, ancak GitHub'ın durum hataları vardı ve taahhütlerim birkaç saat sonra vardı.

https://status.github.com/messages

GitHub durum mesajları:

  • Hizmetin kullanılamamasına ilişkin raporları araştırıyoruz.
  • GitHub.com'a erişim sorunlarını araştırıyoruz.
  • GitHub.com'a erişimi geri yüklemek için bir veri depolama sistemi üzerinde başarısız oluyoruz.

1

Bir başka çok basit ama noobish hatam: Taahhüdüme bir mesaj -mdeğiştirici eklemeyi unuttum . Ben de yazdım:

git commit 'My message'

Doğru yerine:

git commit -m 'My message'

NOT: Herhangi bir hata VERMEZ! Ama taahhütlerinizi zorlayamazsınız ve her zaman Everything up to datebunun yerine geçemezsiniz.


0

burada benim çözümüm yukarıdakilerden farklı. bu sorunun nasıl olduğunu anlayamadım, ama düzelttim. biraz beklenmedik bir şekilde.

şimdi geliyor yolu:

$ git push origin  use_local_cache_v1
Everything up-to-date
$ git status
On branch test
Your branch is ahead of 'origin/use_local_cache_v1' by 4 commits.
  (use "git push" to publish your local commits)
  ......
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:use_local_cache_v1

To push to the branch of the same name on the remote, use

    git push origin test
    
$ git push origin HEAD:use_local_cache_v1    
Total 0 (delta 0), reused 0 (delta 0)
remote:

benim için çalışan komut

$git push origin HEAD:use_local_cache

(Umarım bu sorundan en kısa sürede kurtulursunuz)


0

Süper eski olduğunu biliyorum, ama benim durumumda oldukça hızlı bir şekilde düzelttim.

Ben de aynı hata alıyordum master . Sonra mevcut Stack Overflow yazısını buldum. Ancak, önerilen fikirlere devam etmeden önce, yeni bir taahhütte bulunmaya karar verdim ve orijin itme ile tekrar denedim ve sorunsuz çalıştı.

Nedenini bilmiyorum, ama belki başka biri için yararlıdır.


Aslında soruya cevap vermez. Eğer bir kez kazanmak yeterli itibar , sen ayrıcalık kazanacaktır cevaplara upvote sever. Bu şekilde, sorunun gelecekteki ziyaretçileri bu cevapta daha yüksek oy sayısı görecek ve cevaplayan kişi itibar puanlarıyla ödüllendirilecektir. Bkz . Oylama neden önemlidir ?
Waqar UlHaq

1
Tamam, açıklama için teşekkürler. Ama neden (eğer isterseniz) bu soruna bir "geçici çözüm" olarak kabul edilemiyor? Yine de çözüm değil, ama yine de başkaları için yararlı olabilir.
Cisco

0

Başka bir olasılık, ittiğiniz dizini etkilemeyen taahhütlerinizin olmasıdır. Benim durumumda,

- .git
- README.md
- client/
 - package.json
 - example.js
- api/
 - requirements.txt
 - example.py

Ve modifikasyonda ustalaşmaya karar verdim README.md, sonra koştum git subtree push --prefix client heroku-client masterve mesajı aldımEverything up-to-date


0

Bu aldatıcı hatayla karşılaştığımda Jupyter-Notebook ile çalışıyordum .

Ne müstakil bir başıma ne de yerel ve uzak repoma farklı isimlerim olduğu için yukarıdaki çözümler aracılığıyla çözüm bulamadım .

Ama ne yaptım benim dosya boyutları biraz daha fazla idi gelmiş 1MB ve en büyük neredeyse oldu ~ 2MB . Ben kullanarak dosya boyutunu azaltılmış nasıl ipython defterin dosya boyutunu azaltabilir?tekniği. Çıktıları temizleyerek dosya boyutumu azaltmaya yardımcı oldu. Ben kod itmek başardı, bu yüzden KBs dosya boyutu getirdi.

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.