Mengapa 'git commit' tidak menyimpan perubahan saya?

251

Saya melakukan git commit -m "message"seperti ini:

> git commit -m "save arezzo files"
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

Tetapi setelah itu, ketika saya melakukan git statusitu menunjukkan file yang dimodifikasi yang sama:

> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

Apa yang saya lakukan salah?

arezzo
sumber
16
Gunakan git commit -am "save arezzo files"untuk secara otomatis menambahkan semua perubahan (wrt. Gitignore). Anda mungkin ingin menambahkan hanya file / dir tertentu:git add file.src
mbx

Jawaban:

400

Seperti yang dikatakan dalam pesan:

tidak ada perubahan yang ditambahkan ke komit (gunakan "git add" dan / atau "git commit -a")

Git memiliki "area pementasan" di mana file perlu ditambahkan sebelum dikomit, Anda dapat membaca penjelasannya di sini .


Untuk contoh spesifik Anda, Anda dapat menggunakan:

git commit -am "save arezzo files"

(perhatikan tambahan adi bendera, dapat juga ditulis sebagai git commit -a -m "message"- keduanya melakukan hal yang sama)

Atau, jika Anda ingin lebih selektif tentang apa yang Anda tambahkan ke komit, Anda menggunakan perintah git add untuk menambahkan file yang sesuai ke area pementasan, dan status git untuk melihat pratinjau apa yang akan ditambahkan (mengingat untuk memperhatikan kata-kata yang digunakan).

Anda juga dapat menemukan dokumentasi umum dan tutorial tentang cara menggunakan git pada halaman dokumentasi git yang akan memberikan detail lebih lanjut tentang konsep staging / menambahkan file.


Satu hal lain yang perlu diketahui adalah pementasan interaktif - ini memungkinkan Anda untuk menambahkan bagian dari file ke area pementasan, jadi jika Anda telah membuat tiga perubahan kode yang berbeda (untuk fungsi terkait tetapi berbeda), Anda dapat menggunakan mode interaktif untuk membagi perubahan dan tambahkan / komit setiap bagian secara bergantian. Memiliki komitmen spesifik yang lebih kecil seperti ini dapat membantu.

Peter Boughton
sumber
@PeterBoughton maksud Anda "menambahkan interaktif" bukan "berinteraksi menambahkan"?
djb
3
Nah, maksud saya menambahkan secara interaksional.
Peter Boughton
2
Repositori lokal adalah sejenis area pementasan itu sendiri sebelum mendorong kode ke repositori jarak jauh. Mengapa menambahkan "lapisan" lagi sebelum melakukan perubahan, bukankah terlalu rumit? Saya baru mengenal git, tetapi saya bayangkan 99,99% pengembang selalu menggunakan komit -am karena perubahan tidak pergi ke luar lingkungan lokal mereka.
PawelRoman
2
Saya pikir saya hanya mengalami ini karena saya terbiasa dengan IDE saya yang mengurusnya untuk saya. Tidak yakin mengapa ini merupakan langkah penting juga, tapi sekali lagi, ada banyak tentang git yang tidak saya dapatkan ... Maksud saya git ...
trpt4him
49

Anda tidak menambahkan perubahan. Baik secara khusus menambahkannya melalui

git add filename1 filename2

atau tambahkan semua perubahan (dari jalur root proyek)

git add .

atau gunakan steno -asaat melakukan:

git commit -a -m "message".
Femaref
sumber
Selain itu, saya sangat mendesak pengguna untuk menggunakan penambahan interaktif. Terutama ketika Anda mencoba membuat komitmen kecil yang bagus yang mudah dibalik.
jer
40

Kamu seharusnya melakukan:

git commit . -m "save arezzo files"
Baptiste Pernet
sumber
4
Ini sepertinya jawaban yang benar untuk pertanyaan OP. Dia tidak ingin "menambahkan", dia ingin melakukan apa yang dimodifikasi.
VectorVortec
8

Saya menyalin sub proyek kecil yang saya miliki yang berada di bawah kendali sumber Git ke proyek lain dan lupa menghapus folder .git. Ketika saya pergi untuk mengkomit saya mendapat pesan yang sama seperti di atas dan tidak bisa menghapusnya sampai saya menghapus .gitfolder.

Agak konyol, tetapi perlu memeriksa Anda tidak memiliki folder .git di bawah folder yang tidak melakukan.

Simon Hutchison
sumber
7

Anda bisa melakukan:

git add -u -n

Untuk memeriksa file mana yang Anda modifikasi dan akan ditambahkan (dry run: -n option), lalu

git add -u

Untuk menambahkan file yang baru saja dimodifikasi

Albert Vonpupp
sumber
4

Saya menemukan masalah ini muncul ketika saya telah melakukan git add .dalam subdirektori di bawah di mana .gitignorefile saya tinggal (direktori home repositori saya, jadi untuk berbicara). Coba ubah direktori ke direktori teratas Anda dan jalankan git add .diikuti oleh git commit -m "my commit message".

jam99
sumber
4

Mungkin hal yang jelas, tapi ...

Jika Anda memiliki masalah dengan indeks, gunakan git-gui . Anda mendapatkan pandangan yang sangat bagus tentang bagaimana indeks (area pementasan) bekerja.

Sumber informasi lain yang membantu saya memahami indeks adalah Scott Chacons "Getting Git" halaman 259 dan selanjutnya.

Saya mulai menggunakan baris perintah karena sebagian besar dokumentasi hanya menunjukkan bahwa ...

Saya pikir git-gui dan gitk benar-benar membuat saya bekerja lebih cepat, dan saya menyingkirkan kebiasaan buruk seperti "git pull" misalnya ... Sekarang saya selalu mengambil pertama ... Lihat apa perubahan baru sebenarnya sebelum saya bergabung.

Martin
sumber
3

Alasan mengapa hal ini terjadi adalah karena Anda memiliki folder yang sudah dilacak oleh Git di dalam folder lain yang juga dilacak oleh Git. Misalnya, saya punya proyek dan saya menambahkan subfolder ke dalamnya. Keduanya dilacak oleh Git sebelum saya memasukkan satu di dalam yang lain. Untuk menghentikan pelacakan yang ada di dalamnya, temukan dan hapus file Git dengan:

rm -rf .git

Dalam kasus saya, saya memiliki aplikasi WordPress dan folder yang saya tambahkan di dalamnya adalah sebuah tema. Jadi saya harus pergi ke root tema, dan menghapus file Git, sehingga seluruh proyek sekarang akan dilacak oleh orang tua, aplikasi WordPress.

drjorgepolanco
sumber
1

jika Anda memiliki lebih banyak file dalam kasus saya, saya memiliki 7000 file gambar ketika saya mencoba untuk menambahkannya dari folder rute proyek itu belum menambahkan mereka tetapi ketika saya pergi ke folder gambar semuanya ok. Pergi melalui folder target dan perintah seperti di bawah ini

git add .
git commit -am "image uploading"
git push origin master

git push origin master Mencacah objek: 6574, selesai. Menghitung objek: 100% (6574/6574), selesai. Kompresi Delta menggunakan hingga 4 utas Objek yang mengkompresi: 100% (6347/6347), selesai. Objek penulisan: 28% (1850/6569), 142,17 MiB | 414.00 KiB / s


sumber
0

Saya memiliki masalah di mana saya lakukan commit --amendbahkan setelah mengeluarkan git add .dan itu masih tidak berhasil. Ternyata saya membuat beberapa .vimrcpenyesuaian dan editor saya tidak berfungsi dengan benar. Memperbaiki kesalahan ini sehingga vimmengembalikan kode yang benar menyelesaikan masalah.

Brennan Cheung
sumber
0

Saya memiliki masalah yang sangat mirip dengan pesan kesalahan yang sama. "Perubahan tidak diatur untuk komit", namun ketika saya melakukan diff itu menunjukkan perbedaan. Saya akhirnya menemukan bahwa beberapa waktu yang lalu saya telah mengubah kasus direktori. ex. "PostgeSQL" ke "postgresql". Seperti yang saya ingat sekarang kadang-kadang git akan meninggalkan satu atau dua file di belakang dalam direktori case lama. Kemudian Anda akan mengkomit versi baru ke case baru.

Jadi git tidak tahu yang harus diandalkan. Jadi untuk menyelesaikannya, saya harus pergi ke situs web github. Maka Anda dapat melihat kedua kasus. Dan Anda harus menghapus semua file dalam direktori cased yang salah. Pastikan Anda menyimpan versi yang benar atau dalam direktori kase yang benar.

Setelah Anda menghapus semua file di direktori kasus lama, seluruh direktori itu akan hilang. Kemudian lakukan komit.

Pada titik ini Anda harus dapat melakukan Tarik pada komputer lokal Anda dan tidak melihat konflik lagi. Dengan demikian bisa berkomitmen lagi. :)

brianwaganer
sumber
0

jika Anda memiliki subfolder, yang dikloning dari git-Repository lain, pertama Anda harus menghapus file $ .git $ dari child-Repository: rm -rf .git setelah itu Anda dapat mengubah ke folder induk dan menggunakan git add -A.

Sam Toorchi
sumber