Apa artinya ketika git mengatakan file "perlu pembaruan"?

156

Saya tidak bisa seumur hidup saya menemukan penjelasan yang layak dari pesan "[file]: needs update" yang kadang-kadang dikeluarkan git dari waktu ke waktu. Bahkan FAQ resmi git telah menjelaskan hal ini ditandai sebagai TODO. Jika seseorang dapat menjelaskan A) apa artinya; dan B) bagaimana cara memperbaikinya, saya akan sangat berterima kasih.

rofrankel
sumber
1
Pertanyaan bagus, seperti yang Anda katakan, bahkan GitFaq tidak memiliki jawaban: git.wiki.kernel.org/index.php/…
Justin Ethier
1
Bisakah Anda tahu persis perintah mana yang menghasilkan ini? Dan versi Git yang mana? Saya sudah mencoba untuk menghapusnya dari UI, jadi baru-baru ini Git tidak boleh memberi tahu Anda hal ini kecuali di tempat yang saya lupa ;-).
Matthieu Moy

Jawaban:

108

Itu berarti Anda mencoba untuk menggabungkan perubahan dari suatu tempat, tetapi perubahan termasuk modifikasi ke file yang kotor (saat ini dimodifikasi di pohon kerja Anda). Anda perlu melakukan perubahan yang luar biasa, atau menyembunyikannya, menarik / rebase / menggabungkan / apa pun yang Anda lakukan untuk memperbarui, dan melepaskan

Michael Mrozek
sumber
4
Itu sebenarnya bukan tarikan - itu adalah penggabungan yang merupakan bagian dari tarikan. Anda akan melihat kesalahan yang sama jika Anda mencoba untuk menggabungkan cabang lokal dengan masalah yang sama, dan saya pikir operasi gabungan lainnya (berlaku, simpanan berlaku ...) mencetak kesalahan yang sama jika bukan yang sama.
Cascabel
Ah terima kasih. Itu sebenarnya masuk akal. Saya kira saya perlu memastikan saya melakukan perubahan sebelum keluar dari cabang yang berbeda.
rofrankel
7
Jika itu membantu hasil pencarian, saya juga mengalami masalah ini mencoba melakukan git svn rebasedengan copy pekerjaan kotor. Simpan simpanan, rebase, simpanan pop, dan semuanya baik-baik saja dengan dunia.
Adam Tuttle
1
File itu sendiri tidak dapat diubah - bahkan mengubah atribut file (seperti izin) dapat menyebabkan ini.
chiborg
22

Seperti yang telah ditunjukkan oleh orang lain, perlu memperbarui pesan berarti bahwa file tersebut kotor atau, dengan kata lain, sudah usang. Tetapi alih-alih melakukan reset dan memulai dari awal lagi, apa yang dapat dilakukan hanyalah git statusdan kemudian git add <file> jika itu ada dalam daftar yang diubah . Karena Anda sudah bisa menambahkan file sebelumnya, tetapi kemudian mengubahnya. Ini terjadi pada saya, dan dengan sederhana ini addsaya telah memecahkan masalah.

lomza
sumber
7

Masuk ke server produksi / tujuan Anda, cdke direktori yang berisi aplikasi Anda dan jalankan dua perintah itu.

1. Atur ulang ke versi terbaru

PERINGATAN, ini akan menghapus semua perubahan Anda:

git reset --hard HEAD

2. Tarik perubahan

git pull origin master

NXT
sumber
1
[git reset --hard HEAD] bekerja untuk saya. Saya telah melakukan dari drive share Windows, tetapi direktori Ubuntu saya tidak akan mencerminkan komit yang baru saja saya buat, meskipun itu folder yang sama (Z: dipetakan ke / var / www / html /). Setelah menjalankan ini, [status git] dan [tarik git] keduanya sekarang menunjukkan bahwa itu terkini.
Keith DC
Ini adalah solusi yang bekerja untuk saya juga. Saya mencoba menggunakan subtree git menggunakan SourceTree pada Windows, dan itu kacau dalam proses.
Artem Russakovskii
3

Seperti jawaban untuk pertanyaan lain yang ditautkan, pesan berarti Anda memiliki perubahan yang luar biasa. Anda juga mendapatkan ini misalnya jika Anda melakukan beberapa perubahan dengan git add, kemudian berubah pikiran dan lakukan git reset HEAD filedengan niat untuk memulai kembali.

tripleee
sumber
2
git reset HEAD filemenyebabkan pesan yang sama muncul
pakar
2

Kesalahan ini dapat terjadi ketika proses rebase membuat perubahan tambahan untuk file yang tidak pada cabang target.

Bagi saya bagian yang sulit adalah dengan .gitattributesfile di repo saya. Jenis file biner baru ditambahkan di cabang lain tetapi penanganannya dipaksa sebagai file teks. Ketika file diunduh dari repo oleh git, EOLs (sebenarnya nilai byte binernya) diganti - menghasilkan perbedaan biner.

Menambahkan entri baru untuk menangani tipe file baru sebagai biner dan mencoba kembali seluruh proses memecahkan masalah bagi saya.

proksi
sumber
1

Dalam kasus saya, saya terus mendapatkan

assets/ElipseThree.png: needs update
You must edit all merge conflicts and then
mark them as resolved using git add

Saya memiliki file-file itu di direktori saya, tetapi mereka telah diubah namanya di cabang saya saat ini. Jadi untuk memperbaikinya, saya berlari

$ git mv assets/ElipseThree.png assets/elipseThree.png
$ git add assets/elipseHalfFull.png 
$ git rebase --continue

dan itu memungkinkan saya untuk melanjutkan

ThinkDigital
sumber