Saya melakukan beberapa perubahan untuk dilakukan; bagaimana saya bisa melihat perbedaan semua file yang dipentaskan untuk komit berikutnya? Saya mengetahui status git , tetapi saya ingin melihat perbedaan yang sebenarnya - bukan hanya nama file yang dipentaskan.
Saya melihat bahwa halaman manual git-diff (1) mengatakan
git beda [--Opsi] [-] […]
Formulir ini untuk melihat perubahan yang Anda buat relatif terhadap indeks (area pementasan untuk komit berikutnya). Dengan kata lain, perbedaannya adalah apa yang bisa Anda katakan pada git untuk menambahkan indeks lebih lanjut tetapi Anda masih belum. Anda dapat mengatur perubahan ini dengan menggunakan git-add (1).
Sayangnya, saya tidak bisa memahami ini. Pasti ada satu liner berguna yang bisa saya buat alias, kan?
git status -v
bekerja juga. Lihat jawaban saya di bawah iniless
, seperti pada:git status -v | less
- potongan yang dapat diatur :)Jawaban:
Seharusnya:
--cached
berarti menunjukkan perubahan dalam cache / indeks (yaitu perubahan bertahap) terhadap arusHEAD
.--staged
adalah sinonim untuk--cached
.--staged
dan--cached
tidak menunjuk keHEAD
, hanya perbedaan sehubungan denganHEAD
. Jika Anda memilih apa yang ingin dilakukan menggunakangit add --patch
(ataugit add -p
),--staged
akan mengembalikan apa yang dipentaskan.sumber
git diff --name-only --cached
per posting di stackoverflow.com/a/4525025/255187git difftool --staged
daripadagit diff --staged
meluncurkan alat visual diff standar pada setiap file.difftool
dapat digantidiff
dengan argumen lain juga.git difftool --staged -d
untuk membedakan dua direktori dalam alat visual daripada satu file pada satu waktu.git diff --cached -- <stagedfile>
Grafik sederhana membuat ini lebih jelas:
git diff
Menunjukkan perubahan antara direktori kerja dan indeks. Ini menunjukkan apa yang telah diubah, tetapi tidak dipentaskan untuk komit.
git berbeda --cached
Memperlihatkan perubahan antara indeks dan HEAD (yang merupakan komit terakhir di cabang ini). Ini menunjukkan apa yang telah ditambahkan ke indeks dan dipentaskan untuk komit.
git KEPALA berbeda
Menampilkan semua perubahan antara direktori kerja dan HEAD (yang mencakup perubahan dalam indeks). Ini menunjukkan semua perubahan sejak komit terakhir, apakah mereka telah dipentaskan untuk komit atau tidak.
Juga :
Ada sedikit lebih detail di 365Git.
sumber
foo.c
dan tidak melakukangit add foo.c
, makafoo.c
ini tidak di indeks ; itu tidak dipentaskan untuk komit. Jikagit diff foo.c
naif dibandingkan dengan bekerjafoo.c
dengan indeks, maka itu harus menunjukkan perbedaan besar antara file kosong / tidak ada dan seluruh kontenfoo.c
. Jadi pada kenyataannya, ketika file tidak ada dalam indeks,git diff
jatuh kembali, untuk file itu, menggunakanHEAD
salinan.HEAD
mana perubahan bertahap diterapkan. Ingat bahwa Git bekerja dengan menyimpan perubahan, bukan dengan menyimpan seluruh file. Saat Anda mem-stage file, itu hanya menyimpan perubahan yang dilakukan. Jika indeks kosong seperti yang Anda maksudkan, itu tidak akan tahu bagaimana cara menyimpan perubahan dalam indeks, dan harus menyimpan seluruh file sebagai "baru ditambahkan" - yang salah.HEAD
akan memiliki versifoo.c
file tidak berubah (mereka bukan salinan fisik, tetapi hanya salinan logis untuk Anda dan saya. Untuk Git mereka hanya aliran data yang sama bahwa setiap komit yang pernah terlibat file yang merujuk ke ). Jadi, ketika Anda melakukannyagit diff
pada unstaged sepenuhnyafoo.c
itu tidak benar-benar jatuh kembali keHEAD
itu sebenarnya melakukan diff dengan Indeks (yang kebetulan mengandung versi file yang sama persis sepertiHEAD
halnya). Jadi gambarnya benar.git status -v
setara dengangit diff --cached
(plusgit status
tentu saja)Jika Anda tertarik pada tampilan visual berdampingan, alat difus visual diff dapat melakukannya. Ia bahkan akan menampilkan tiga panel jika beberapa tetapi tidak semua perubahan dilakukan. Dalam kasus konflik, bahkan akan ada empat panel.
Meminta dengan
di copy pekerjaan Git Anda.
Jika Anda bertanya kepada saya, perbedaan visual terbaik yang pernah saya lihat selama satu dekade. Juga, ini tidak spesifik untuk Git: Ini beroperasi dengan kebanyakan VCS lainnya, termasuk SVN, Mercurial, Bazaar, ...
Lihat juga: Perlihatkan pohon yang dipentaskan & bekerja di git diff?
sumber
brew install diffuse
berfungsi pada OS X. Tidak menampilkan 3 panel jika perubahan yang tidak dipentaskan dan yang dipentaskan - apakah maksud Anda perubahan yang belum ada dalam indeks?Catatan yang
git status -v
juga menunjukkan perubahan bertahap! (Berarti Anda harus melakukan stage -git add
- beberapa perubahan. Tidak ada perubahan bertahap, tidak berbeda dengangit status -v
.Ia melakukan itu sejak Git 1.2.0, Februari 2006 )
Dalam bentuknya yang panjang (default),
git status
memiliki opsi "verbose" tanpa dokumen yang benar-benar menampilkan perbedaan antara HEAD dan indeks.Dan itu akan menjadi lebih lengkap: lihat " Tampilkan pohon yang dipentaskan & bekerja di git diff? " (Git 2.3.4+, Q2 2015):
sumber
git diff HEAD
git status -vv
juga mencakup apa yanggit diff HEAD
dilakukan.git version 1.8.3.1
. Saya tahu ini sudah tua, tetapi jika mungkin, perhatikan kapan bendera ini diperkenalkan.git status -v
lebih tua ( github.com/git/git/commit/… , git 1.2.0, Februari 2006!). Perhatikan bahwa ini menampilkan perbedaan antara indeks danHEAD
: jika Anda telah menambahkan sesuatu ke indeks (tidakgit add
), makagit status -v
tidak akan menampilkan perbedaan apa pun.git status -v -v
lebih baru (Git 2.3.4, Maret 2015)git diff -v
.Anda dapat menggunakan perintah ini.
The
--cached
pilihangit diff
cara untuk mendapatkan file dipentaskan, dan--name-only
sarana pilihan untuk mendapatkan hanya nama-nama file.sumber
--name-only
opsi yang saya bisa gunakan yang biasagit status
Dari versi 1.7 dan yang lebih baru seharusnya:
sumber
MENGGUNAKAN ALAT VISUAL DIFF
Jawaban Default (pada baris perintah)
Jawaban teratas di sini dengan benar menunjukkan cara melihat perubahan yang di-cache / dipentaskan di
Index
:atau
$ git diff --staged
yang merupakan alias.Meluncurkan Alat Visual Diff
Jawaban default akan memuntahkan perubahan diff pada bash git (yaitu pada baris perintah atau di konsol). Bagi mereka yang lebih suka representasi visual dari perbedaan file bertahap, ada skrip yang tersedia di dalam git yang meluncurkan alat diff visual untuk setiap file yang dilihat alih-alih menunjukkannya pada baris perintah, yang disebut
difftool
:Ini akan melakukan hal yang sama seperti ini
git diff --staged
, kecuali setiap kali alat diff dijalankan (yaitu setiap kali file diproses oleh diff), ia akan meluncurkan alat visual diff standar (di lingkungan saya, ini kdiff3 ).Setelah alat diluncurkan, skrip git diff akan berhenti hingga alat visual diff Anda ditutup. Oleh karena itu, Anda harus menutup setiap file untuk melihat yang berikutnya.
Anda Selalu Dapat Menggunakan
difftool
di tempatdiff
dalam perintah gitUntuk semua kebutuhan visual Anda yang berbeda,
git difftool
akan bekerja di tempat apa pungit diff
perintah , termasuk semua opsi.Misalnya, agar peluncuran alat visual berbeda tanpa menanyakan apakah akan melakukannya untuk setiap file, tambahkan
-y
opsi (saya pikir biasanya Anda menginginkan ini !!):Dalam hal ini ia akan menarik setiap file dalam alat visual diff, satu per satu, membuka yang berikutnya setelah alat ditutup.
Atau untuk melihat perbedaan dari file tertentu yang dipentaskan di
Index
:Untuk semua opsi, lihat halaman manual:
Menyiapkan Alat Visual Git
Untuk menggunakan alat visual git selain dari yang standar, gunakan
-t <tool>
opsi:Atau, lihat halaman manual difftool untuk cara mengkonfigurasi git untuk menggunakan alat visual diff standar yang berbeda.
Contoh
.gitconfig
entri untuk vscode sebagai alat diff / mergeBagian dari menyiapkan difftool melibatkan mengubah
.gitconfig
file, baik melalui perintah git yang mengubahnya di belakang layar, atau mengeditnya secara langsung.Anda dapat menemukannya
.gitconfig
di direktori home Anda, seperti~
di Unix atau normalc:\users\<username>
di Windows).Atau, Anda dapat membuka pengguna
.gitconfig
dengan editor Git default Andagit config -e --global
.Berikut adalah contoh entri dalam pengguna global saya
.gitconfig
untuk Kode VS baik sebagai alat berbeda dan alat gabungan:sumber
Untuk penggunaan perbandingan Staging Area vs Repository (commit terakhir)
Perintah membandingkan stage Anda (
$ git add fileName
perubahan ) Anda dengan komit terakhir Anda. Jika Anda ingin melihat apa yang telah dipentaskan yang akan masuk ke komit Anda berikutnya, Anda dapat menggunakan git diff --staged. Perintah ini membandingkan perubahan bertahap Anda dengan komit terakhir Anda.Untuk Bekerja, perbandingan penggunaan Staging
Perintah membandingkan apa yang ada di direktori kerja Anda dengan apa yang ada di area pementasan Anda. Penting untuk dicatat bahwa git diff dengan sendirinya tidak menunjukkan semua perubahan yang dibuat sejak komit terakhir Anda - hanya perubahan yang masih belum dipentaskan. Jika Anda telah melakukan semua perubahan Anda (
$ git add fileName
), git diff tidak akan memberi Anda hasil.Juga, jika Anda membuat file (
$ git add fileName
) dan kemudian mengeditnya, Anda dapat menggunakan git diff untuk melihat perubahan pada file yang dipentaskan dan perubahan yang tidak dipentaskan.sumber
$ git diff
" . Saya cukup yakingit diff
membandingkan antara Bekerja vs Pementasan. Lihat stackoverflow.com/a/1587952Jika niat Anda adalah untuk mendorong target cabang repo jarak jauh dan pass pertama Anda pada log perubahan komit tidak lengkap, Anda dapat memperbaiki pernyataan komit sebelum mendorong seperti ini.
Secara lokal
... buat beberapa perubahan ...
... ingat lebih banyak perubahan yang tidak disebutkan dalam komit ...
git diff asal / master # lihat dipentaskan tetapi tidak mendorong perubahan
... ubah pernyataan komitmen yang dilakukan ...
sumber
Jika Anda memiliki lebih dari satu file dengan perubahan bertahap, mungkin lebih praktis untuk digunakan
git add -i
, lalu pilih6: diff
, dan akhirnya pilih file yang Anda minati.sumber
Secara default git diff digunakan untuk menampilkan perubahan yang tidak ditambahkan ke daftar file git yang diperbarui. Tetapi jika Anda ingin menunjukkan perubahan yang ditambahkan atau stag, maka Anda perlu memberikan opsi tambahan yang akan membuat git tahu bahwa Anda tertarik pada stagged atau menambahkan file diff .
Contoh
Setelah Anda menambahkan file, Anda tidak dapat menggunakan default 'git diff'. Anda harus melakukan ini: -
sumber
git gui
dangit-cola
merupakan utilitas grafis yang memungkinkan Anda melihat dan memanipulasi indeks. Keduanya termasuk diff visual sederhana untuk file yang dipentaskan, dangit-cola
juga dapat meluncurkan alat diff visual yang berdampingan yang lebih canggih.Lihat jawaban saya yang terkait erat di Cara menghapus file dari indeks di git? , dan juga katalog resmi Klien Git - GUI ini .
sumber
Pikirkan tentang
gitk
alat ini juga, dilengkapi dengan git dan sangat berguna untuk melihat perubahannyasumber