git push mengatakan "semuanya mutakhir" meskipun saya memiliki perubahan lokal


238

Saya memiliki server gitosis jarak jauh dan repositori git lokal, dan setiap kali saya membuat perubahan besar dalam kode saya, saya akan mendorong perubahan ke server itu juga.

Tapi hari ini saya menemukan bahwa meskipun saya memiliki beberapa perubahan lokal dan berkomitmen untuk repositori lokal, ketika menjalankannya git push origin mastertertulis 'Semuanya terbaru', tetapi ketika saya gunakan git cloneuntuk checkout file pada server jauh, itu tidak mengandung perubahan terbaru . Dan saya hanya memiliki satu cabang bernama "master" dan satu server jauh bernama "asal".

PS: Ini yang ditampilkan git saat berjalan ls-remote, saya tidak yakin apakah itu membantu

$ 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


Layak memeriksa ulang Anda berada di direktori yang benar! Esp. ketika Anda memiliki submodula Anda dapat keliru git tanggapan dari orang tua ..
geotheory

Dalam kasus saya, saya mendapatkan kesalahan sementara commitsaya tidak melihat dan mencoba untuk mendorong kode
Zohab Ali

3
lupa berkomitmen?
ldgorman

Jawaban:


256

Apakah Anda bekerja dengan kepala yang terpisah ?

Seperti dalam:

kepala terpisah

menunjukkan bahwa komit terbaru Anda bukan kepala cabang.

Peringatan : berikut ini tidak a git reset --hard: pastikan untuk menggunakan git stashterlebih dahulu jika Anda ingin menyimpan file yang sedang dimodifikasi.

$ 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>

Seperti yang disebutkan di git checkouthalaman manual (penekanan saya):

Terkadang berguna untuk checkout komit yang tidak ada di ujung salah satu cabang Anda .
Contoh paling jelas adalah memeriksa komit di titik rilis resmi yang ditandai, seperti ini:

$ git checkout v2.6.18

Versi git sebelumnya tidak mengizinkan ini dan meminta Anda untuk membuat cabang sementara menggunakan -bopsi, tetapi mulai dari versi 1.5.0, perintah di atas melepaskan Anda HEADdari cabang saat ini dan langsung menunjuk komit yang disebutkan oleh tag ( v2.6.18di contoh di atas).

Anda dapat menggunakan semua perintah git saat dalam kondisi ini.
Anda dapat menggunakan git reset --hard $othercommituntuk bergerak lebih jauh, misalnya.
Anda dapat membuat perubahan dan membuat komit baru di atas HEAD yang terpisah .
Anda bahkan dapat membuat gabungan dengan menggunakan git merge $othercommit.

Keadaan Anda saat KEPALA Anda terlepas tidak dicatat oleh cabang mana pun (yang alami --- Anda tidak berada di cabang mana pun).
Apa artinya ini adalah bahwa Anda dapat membuang komit dan penggabungan sementara Anda dengan beralih kembali ke cabang yang ada (misalnya git checkout master), dan nanti git pruneatau git gcakan mengumpulkan sampah.
Jika Anda melakukan ini secara tidak sengaja, Anda dapat meminta reflog untuk KEPALA di mana Anda berada, misalnya

$ git log -g -2 HEAD

4
Tidak sepenuhnya jelas bagi saya bagaimana saya masuk ke keadaan ini (melakukan mucking dengan git-svn saat ini), tetapi ini sudah cukup untuk membuat saya kembali ke tempat yang tepat. Terima kasih.
Christopher Schmidt

Saya berada dalam keadaan kepala yang terpisah, menggabungkan perubahan saya, melakukan perubahan saya dan sekarang saya ingin mendorong ini kepada Guru dan tidak bisa - memberi tahu saya "semuanya terkini". Tetapi saya mengikuti instruksi yang diberikan Gitlab saya: 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" Saya baik sampai langkah terakhir. Tetapi sekarang saya hanya bingung bagaimana untuk bergerak maju.
John

@ John Anda harus berada di cabang untuk mendorong. Selama Anda berada dalam mode HEAD terpisah, itu tidak akan berhasil. Atur ulang cabang Anda ke tempat Anda berada git branch -f myBranch HEAD:, lalu periksa cabang tersebut, dan dorong. Dalam kasus Anda, myBranchmungkin masterjika Anda sedang dalam proses penggabungan nodeAPI.
VonC

Waspadalah terhadap kehilangan setiap perubahan lokal setelah menjalankan perintah ini !! Pertimbangkan untuk melakukan cadangan git simpanan & kode sebelum melakukan hal seperti ini.
kta

@kta Poin bagus: Saya telah mengedit jawaban untuk membuat peringatan itu terlihat.
VonC

152

Err .. Jika Anda seorang git noob, Anda yakin sudah punya git commitsebelumnya git push? Saya membuat kesalahan ini pertama kali!


10
Itu git commit -a -m "your message goes here"dalam kasus saya
aexl

Saya SUKA (sarkasme) setiap kali saya ingin menambahkan proyek baru ke github yang terkadang saya lupa dan pesan kesalahan membuat saya berpikir saya melakukan sesuatu yang benar-benar salah - maka tentu saja DUH! commit Hanya terjadi pada saya ketika saya membuat repositori cadangan baru dan saya lupa
Tom Stickel

git noob di sini - saya lupa untuk melakukan setiap waktu sebelum saya mendorong - mendorong harus secara otomatis melakukan jika Anda belum melakukannya sebelumnya
FoxMcCloud

2
@FoxMcCloud terjadinya tindak merupakan langkah penting untuk menjadi sadar, saya yakin Anda akan belajar untuk mencintai jika Anda belum :) ~ git add -A, git diff --staged, gulungan melalui perubahan Hmm tampak sangat baik, git commit -m 'bam!',git push
AFOC

58

Mungkin Anda sedang mendorong cabang lokal baru?

Cabang lokal baru harus didorong secara eksplisit:

git push origin your-new-branch-name

Hanya satu dari hal-hal itu tentang git ... Anda mengkloning repo, membuat cabang, melakukan beberapa perubahan, mendorong ... "Semuanya sudah terbaru". Saya mengerti mengapa itu terjadi, tetapi alur kerja ini sangat tidak ramah bagi pendatang baru.


3
Terima kasih! Ini memperbaiki masalah saya "semuanya terkini" dengan cabang baru yang saya miliki
Pangu

Apa yang dimaksud dengan "nama-cabang-baru Anda"? PS: Anda benar tentang pendatang baru.
www-0av-Com

@ user1863152 itulah nama cabang lokal baru yang Anda buat. Sepertinya Anda tidak melakukan itu, jadi periksa jawaban lain di sini.
Roman Starkov

Sepenuhnya setuju dengan "alur kerja ini sangat tidak ramah untuk pendatang baru". Saya berjuang dengan ini sejak 1 jam. Saya mengatur repo jarak jauh dan lokal. Membuat perubahan pada file REAME lokal dan mencoba mendorongnya ke jarak jauh dan tidak ada perubahan di jarak jauh.
Vir


28

Situasi lain yang penting untuk diperhatikan: Jenis status default untuk git adalah Anda bekerja di cabang "master". Dan untuk banyak situasi, Anda hanya akan nongkrong di sana sebagai cabang kerja utama Anda (meskipun beberapa orang suka dan melakukan hal-hal lain).

Bagaimanapun, itu hanya satu cabang. Jadi situasi yang mungkin saya hadapi adalah:

Cabang aktif saya sebenarnya BUKAN cabang master. ... Tapi saya biasanya melakukan perintah: git push(dan sebelumnya saya lakukan git push origin master, jadi itu jalan pintas untuk ITU).

Jadi saya biasanya mendorong cabang master ke repo bersama ... yang mungkin merupakan hal yang baik, dalam kasus saya ...

Tetapi saya lupa bahwa perubahan yang telah saya kerjakan belum di cabang utama !!!

Jadi karena itu setiap kali saya mencoba git push, dan saya melihat "Semuanya up to date", saya ingin berteriak, tetapi tentu saja, itu bukan kesalahan git! Ini milikku.

Jadi sebagai gantinya, saya menggabungkan cabang saya menjadi master, dan kemudian melakukan push, dan semuanya bahagia lagi.


Saya ingin berteriak juga, tetapi kemudian, Anda mengkhotbahkan jalan keselamatan, untuk menggabungkan brant menjadi tuan, dan kemudian git push.
Aaron C

16
$ git push origin local_branch:remote_branch

Penjelasan

Saya memiliki kesalahan yang sama & menghabiskan berjam-jam mencoba mencari tahu. Akhirnya saya menemukannya. Apa yang saya tidak tahu adalah bahwa mendorong seperti ini git push origin branch-xakan mencoba mencari branch-x secara lokal kemudian mendorong ke remote branch-x.

Dalam kasus saya, saya memiliki dua url jarak jauh. Saya melakukan checkout dari branch-x ke branch-y ketika mencoba untuk mendorong dari y secara lokal ke x remote. Saya mendapat pesan bahwa semuanya sudah terbaru yang merupakan hal biasa karena saya mendorong ke x dari remote kedua.

Singkat cerita untuk tidak jatuh dalam perangkap semacam ini Anda perlu menentukan sumber referensi dan target ref:

$ git push origin local_branch:remote_branch

Memperbarui:

Jika Anda harus menjalankan perintah ini setiap kali Anda mendorong cabang Anda, Anda mungkin perlu mengatur hulu antara cabang lokal & jauh Anda dengan yang berikut ini:

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

Atau

$ git push -u origin local_branch:remote_branch

'git push upstream dev: master' Ini berarti akan mendorong sumber dari dev ke master. Baik?
Dhaduk Mitesh

Ini membantu saya, saya memiliki cabang lokal lain bernama cabang terpencil, yang menyebabkan kebingungan.
Hubert Kubiak

Ok ini pasti bekerja untuk saya tetapi saya harus melakukan ini setiap kali saya ingin mendorong sesuatu ke remote. Bagaimana cara memperbaikinya sekali dan untuk semua?
SamuraiJack

Anda mungkin perlu mengatur hulu antara cabang lokal & jauh Anda dengan yang berikut: $ git push --set-upstream origin local_branch: remote_branch
Melchia

6

Lihat jawaban VonC di atas - saya perlu langkah ekstra:

$ 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>

Saya melakukan ini, tetapi ketika saya kemudian mencoba git push remoterepo master, katanya "kesalahan: gagal mendorong beberapa referensi. Untuk mencegah Anda kehilangan riwayat, pembaruan yang tidak maju cepat ditolak, Gabungkan perubahan jarak jauh (mis. 'Git pull') sebelum mendorong lagi. "

Jadi saya melakukan 'git pull remoterepo master', dan ternyata ada konflik. Saya lakukan git reset --hard <commit-id>lagi, menyalin file yang konflik ke folder cadangan, lakukan git pull remoterepo masterlagi, menyalin file yang konflik kembali ke proyek saya, lakukan git commit, kemudian git push remoterepo master, dan kali ini berhasil.

Git berhenti mengatakan 'semuanya sudah terbaru' - dan berhenti mengeluh tentang 'maju cepat'.


3

Saya telah menghadapi situasi yang sama; ketika saya melakukan perubahan dan mencoba git push origin master, dikatakan bahwa semuanya sudah mutakhir.

Saya harus ke git addfile yang diubah dan kemudian git push origin master. Mulai bekerja sejak saat itu.


4
Bukankah Anda harus git commitmenambahkan file itu sebelum mendorong?
David Harkness

3

Dari status git Anda, Anda mungkin memiliki situasi yang berbeda dari saya.

Tapi bagaimanapun, inilah yang terjadi pada saya .. Saya menemukan kesalahan berikut:

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

Pesan yang lebih informatif di sini adalah bahwa jarak jauh terputus. Ternyata itu karena melebihi ukuran buffer postingan http. Solusinya adalah meningkatkannya dengan

git config http.postBuffer 524288000


3

Saya memiliki masalah ini hari ini dan tidak ada hubungannya dengan jawaban lain. Inilah yang saya lakukan dan bagaimana saya memperbaikinya:

Sebuah repositori milik saya baru-baru ini dipindahkan, tetapi saya memiliki salinan lokal. Saya bercabang dari cabang "master" lokal saya dan membuat beberapa perubahan - dan kemudian saya ingat bahwa repositori telah pindah. Saya biasa git remote set-url origin https://<my_new_repository_url>mengatur URL baru tetapi ketika saya mendorongnya hanya akan mengatakan "Semuanya up to date" daripada mendorong cabang baru saya untuk dikuasai.

Saya akhirnya menyelesaikannya dengan memunculkan kembali origin/masterdan kemudian mendorong dengan nama cabang eksplisit, seperti ini:

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

Saya harap ini membantu siapa saja yang memiliki masalah yang sama!


3

Sangat jarang - tetapi tetap: Di Windows, mungkin paket -ref memiliki cabang dengan satu case huruf (mis. Dev / mybranch), sedangkan folder refs memiliki case lain (mis. Dev / mybranch) ketika core.ignorecase disetel ke true .

Solusinya adalah secara manual menghapus baris yang relevan dari ref-ref . Tidak menemukan solusi yang lebih bersih.


Itu juga masalah bagi saya. Berakhir dengan mengganti nama folder dengan case yang salah di dalam folder .git (log / ref / head, ref / head).
Alexey Solonets

2

Saya mengalami sendiri hal ini ketika saya menggabungkan cabang di Github dan terus mengembangkannya secara lokal. Perbaikan saya sedikit berbeda dari yang lain yang telah disarankan.

Pertama saya bercabang cabang lokal baru dari cabang lokal lama saya (yang saya tidak bisa dorong). Lalu saya mendorong cabang lokal baru ke server asal (Github). Yaitu

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

Ini membuat perubahan muncul di Github, meskipun di newlocalbranch daripada oldlocalbranch.


2

Dalam kasus saya, saya punya 2 repo jarak jauh.

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

Kedua repo itu sama. Hanya satu yang httpslain ssh. Jadi menghapus yang tidak diinginkan, (Dalam kasus saya ssh. Karena saya menggunakan httpskarena sshtidak berfungsi!) Memperbaiki masalah bagi saya.


2

Kesalahan saya berbeda dari semua yang disebutkan sejauh ini. Jika Anda tidak tahu mengapa Anda memiliki kepala yang terpisah, maka Anda mungkin tidak. Saya sedang mengerjakan autopilot dengan git commitdan git push, dan belum membaca keluaran dari git commit. Ternyata, itu adalah pesan kesalahan karena saya lupa -am.

[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

Memperbaikinya dengan meletakkan di -amtempat yang biasanya saya lakukan:

[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

Saya telah menghadapi masalah yang sama. Karena saya tidak menambahkan perubahan ke area pementasan. Dan saya langsung mencoba mendorong kode ke repo jarak jauh menggunakan perintah:

git push origin master

Dan itu menunjukkan pesannya Everything up-to-date.

untuk memperbaiki masalah ini, coba langkah-langkah ini

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

1

Pastikan Anda belum melakukan kesalahan pada URL jauh Anda.

Saya hanya ingin juga menyebutkan bahwa saya mengalami ini setelah mengaktifkan Git sebagai CVS di konfigurasi build Jenkins lokal. Tampaknya Jenkins memeriksa komit terbaru dari cabang yang saya berikan dan juga mengatur ulang remote saya agar sesuai dengan jalur yang saya berikan ke repo. Harus checkout cabang fitur saya lagi dan memperbaiki url remote asal saya dengan 'git remote set-url'. Jangan menunjuk alat build ke direktori kerja Anda atau Anda akan memiliki waktu yang buruk. Remote saya disetel ke path file ke direktori kerja saya, jadi secara alami melaporkan semuanya up-to-date ketika saya mencoba untuk mendorong perubahan dengan sumber dan tujuan yang sama.


1

Kemungkinan lain adalah Anda memberi nama direktori di file .gitignore Anda yang dikecualikan. Jadi komitmen baru tidak akan didorong. Itu terjadi pada saya bahwa saya menamakan direktori untuk mengabaikan "pencarian", tapi itu juga direktori di pohon sumber saya.


1

Ada cara cepat yang saya temukan. Buka folder .git Anda, buka HEADfile dan ubah cabang apa pun yang Anda kuasai. Misalnya ref:refs/heads/master


Sebenarnya mengaturnya untuk refs/heads/mastermerusak repositori saya. Tapi pengaturan ke apa yang saya pikir menjadi KEPALA komit memberikan pesan berikut: Warning: you are leaving 1 commit behind, not connected to any of your branches. Saya dapat mengambil komit ke cabang baru dan menggabungkannya kembali ke master.
schmijos

1

Saya memiliki masalah yang sama. Dalam kasus saya itu disebabkan oleh harusnya nama untuk remote yang sama. Itu menciptakan 'asal' standar, tapi saya sudah menggunakan 'github' sebagai remote saya untuk waktu yang lama, jadi itu juga ada di sana. Segera setelah saya menghapus remote 'asal', kesalahan hilang.


1

Saya mengalami ini (komit di git log saya tidak ada di GitHub meskipun git mengatakan semuanya sudah terbaru) dan saya yakin masalahnya adalah Github. Saya tidak mendapatkan pesan kesalahan di git, tetapi GitHub memiliki kesalahan status dan komit saya ada beberapa jam kemudian.

https://status.github.com/messages

Pesan status GitHub adalah:

  • Kami sedang menyelidiki laporan tidak tersedianya layanan.
  • Kami sedang menyelidiki masalah dalam mengakses GitHub.com.
  • Kami gagal menggunakan sistem penyimpanan data untuk memulihkan akses ke GitHub.com.

1

Lain kesalahan saya yang sangat sederhana namun noobish: Saya hanya lupa menambahkan -mpengubah pesan di komit saya. Jadi saya menulis:

git commit 'My message'

Alih-alih benar:

git commit -m 'My message'

CATATAN: Ini TIDAK menimbulkan kesalahan! Tetapi Anda tidak akan bisa mendorong komitmen Anda dan selalu mendapatkan Everything up to datesebaliknya


0

di sini, solusi saya berbeda dari yang di atas. saya belum menemukan bagaimana masalah ini terjadi, tetapi saya memperbaikinya. sedikit tak terduga.

sekarang datang jalan:

$ 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:

perintah yang bekerja untukku adalah

$git push origin HEAD:use_local_cache

(Harap kalian segera keluar dari masalah ini)


0

Saya tahu ini sangat tua, tetapi dalam kasus saya, saya memperbaikinya dengan cepat.

Saya mendapatkan kesalahan yang sama saat menjadi salah satu komit depan master. Kemudian saya menemukan posting Stack Overflow saat ini. Namun sebelum melanjutkan dengan ide-ide yang disarankan, saya hanya memutuskan untuk membuat komitmen baru dan mencoba lagi dengan dorongan ke asal dan itu bekerja dengan lancar.

Saya tidak tahu mengapa, tapi mungkin itu berguna untuk orang lain.


Itu sebenarnya tidak memberikan jawaban untuk pertanyaan. Setelah Anda mendapatkan reputasi yang cukup , Anda akan mendapatkan hak istimewa untuk mengubah jawaban yang Anda sukai. Dengan cara ini, pengunjung pertanyaan di masa depan akan melihat jumlah suara yang lebih tinggi pada jawaban itu, dan penjawab juga akan dihargai dengan poin reputasi. Lihat Mengapa memilih itu penting .
Waqar UlHaq

1
Ok, terima kasih atas klarifikasi. Tapi mengapa itu tidak bisa dianggap (jika Anda mau) sebagai "solusi" untuk masalah ini? Meskipun ini bukan solusinya, tetapi tetap bisa bermanfaat bagi orang lain.
Cisco

0

Kemungkinan lain adalah bahwa Anda memiliki komit yang tidak memengaruhi direktori yang Anda dorong. Jadi dalam kasus saya, saya memiliki struktur seperti

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

Dan saya membuat komitmen untuk menguasai modifikasi README.md, lalu berlari git subtree push --prefix client heroku-client masterdan menerima pesanEverything up-to-date


0

Saya bekerja dengan Jupyter-Notebook ketika saya menemukan kesalahan tipuan ini.

Saya tidak dapat menyelesaikan melalui solusi yang disediakan di atas karena saya tidak memiliki kepala yang terpisah juga tidak memiliki nama yang berbeda untuk repo lokal dan jarak jauh saya .

Tapi apa yang saya miliki adalah ukuran file saya sedikit lebih besar dari 1MB dan yang terbesar hampir ~ 2MB . Saya mengurangi ukuran file menggunakan Bagaimana saya bisa mengurangi ukuran file notebook iPython saya?teknik. Ini membantu mengurangi ukuran file saya dengan membersihkan output. Saya bisa mendorong kode, selanjutnya karena membawa ukuran file saya di KB.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.