Ketika saya membuat perubahan pada file di Git, bagaimana saya bisa melakukan hanya beberapa perubahan?
Misalnya, bagaimana saya bisa melakukan hanya 15 baris dari 30 baris yang telah diubah dalam file?
git
git-commit
freddiefujiwara
sumber
sumber
git gui
=git add -e
>git add -i -p
; dalam hal kenyamanan:git gui
>git add -i -p
>git add -e
. Jadi: pilihgit gui
ketika Anda memiliki akses ke X. pilihgit add -i -p
untuk hal-hal sederhana dan ketika Anda tidak memiliki atau ingin menggunakan X.git add -e
untuk pementasan kompleks tanpa X.Jawaban:
Anda dapat menggunakan
git add --patch <filename>
(atau-p
singkatnya), dan git akan mulai memecah file Anda menjadi apa yang dianggapnya masuk akal "bakhil" (bagian dari file). Ini kemudian akan meminta Anda dengan pertanyaan ini:Berikut ini adalah deskripsi dari setiap opsi:
Jika file tersebut belum ada di repositori, Anda dapat melakukannya terlebih dahulu
git add -N <filename>
. Setelah itu Anda bisa melanjutkangit add -p <filename>
.Setelah itu, Anda dapat menggunakan:
git diff --staged
untuk memeriksa apakah Anda melakukan perubahan yang benargit reset -p
untuk unstage keliru menambahkan bakhilgit commit -v
untuk melihat komit Anda saat Anda mengedit pesan komit.Catatan ini jauh berbeda dari
git format-patch
perintah, yang tujuannya adalah untuk mengurai data komit ke dalam.patch
file.Referensi untuk masa depan: Git Tools - Staging Interaktif
sumber
-p/--patch
adalah jalan pintas ke tindakan tambalan di dalam-i/--interactive
perintah yang memulai mode Interaktif yang berguna .git diff
halnya.e
, Anda dapat mengedit bongkahan secara manual dengan mengganti+
atau-
oleh#
git push
bilang sudah up to date. dan jika saya melakukannyagit diff
saya melihat bakhil saya katakann
. jikagit diff --staged
saya melihat komit saya ingin mendorong. Dengan asumsi saya dapat mendorong komit, bagaimana cara menghapus bakhil yang saya katakanno
?Anda dapat menggunakan
git add --interactive
atau , dan kemudian ( tidak ); lihat mode Interaktif di git-add manpage, atau cukup ikuti instruksi.git add -p <file>
git commit
git commit -a
Modern Git juga memiliki
git commit --interactive
(dangit commit --patch
, yang merupakan jalan pintas ke opsi tambalan di komit interaktif).Jika Anda lebih suka melakukannya dari GUI, Anda bisa menggunakan git-gui . Anda cukup menandai bongkahan yang ingin Anda sertakan dalam komit. Saya pribadi merasa lebih mudah daripada menggunakan
git add -i
. GUI Git lain, seperti QGit atau GitX, mungkin juga memiliki fungsi ini.sumber
git gui menyediakan fungsionalitas ini di bawah tampilan diff. Cukup klik kanan baris yang Anda minati dan Anda akan melihat item menu "stage this to commit".
sumber
gitk
, tetapi disertakan dengan Git Bash untuk Windows; Anda harus memiliki entri menu mulai atau dapat memulainya dengan perintahgit gui
. Ada jugastage this hunk
yang mungkin lebih bermanfaat daripadastage this line
. Mungkin baru sejak jawaban ini dibuat 10 tahun yang lalu.Saya percaya itu
git add -e myfile
adalah cara termudah (setidaknya preferensi saya) karena hanya membuka editor teks dan memungkinkan Anda memilih baris mana yang ingin Anda panggung dan baris mana yang tidak. Mengenai perintah pengeditan:menambahkan konten:
konten yang dihapus:
konten yang dimodifikasi:
Setiap detail tentang
git add
tersedia digit --help add
sumber
-e
adalah--edit
.git --help add
s
dalam mode tambalan interaktif.git add -e
) * tidak * mengubah konten file pada disk. Itu hanya memindahkan bagian dari perubahan dari tidak bertahap ke panggung (indeks).Jika Anda menggunakan vim, Anda mungkin ingin mencoba plugin yang bagus bernama fugitive .
Anda dapat melihat perbedaan file antara copy pekerjaan dan indeks dengan
:Gdiff
, dan kemudian menambahkan baris atau bakhil ke indeks menggunakan perintah vim diff klasik sepertidp
. Simpan modifikasi dalam indeks dan komit dengan:Gcommit
, dan Anda selesai.Screencast pengantar yang sangat bagus di sini (lihat bagian 2 ).
sumber
:diffget/:diffput
dalam mode visual, di mana saya dapat memilih jalur tertentu, yang ingin saya reset / komit. Jadi, pastikan lagi: vim itu luar biasa.Saya akan sangat menyarankan menggunakan SourceTree dari Atlassian. (Ini gratis.) Itu membuat ini sepele. Anda dapat menampilkan setiap potongan kode atau setiap baris kode dengan cepat dan mudah.
sumber
Perlu dicatat bahwa untuk digunakan
git add --patch
untuk file baru, Anda harus terlebih dahulu menambahkan file ke indeks dengangit add --intent-to-add
:sumber
Ketika saya memiliki banyak perubahan, dan pada akhirnya akan membuat beberapa komit dari perubahan, maka saya ingin menyimpan titik awal saya sementara sebelum melakukan sesuatu.
Seperti ini:
Jawaban Whymarrh adalah apa yang biasanya saya lakukan, kecuali kadang-kadang ada banyak perubahan dan saya dapat mengatakan bahwa saya mungkin membuat kesalahan saat melakukan hal-hal, dan saya ingin keadaan berkomitmen saya bisa mundur untuk umpan kedua.
sumber
Jika Anda menggunakan emacs, lihatlah Magit , yang menyediakan antarmuka git untuk emacs. Ini mendukung pementasan bakhil (bagian file) dengan cukup baik.
sumber
Intellij IDEA (dan saya kira semua produk lain dari seri) telah membangun dukungan untuk sebagian komitmen sejak v2018.1
sumber
Bagi mereka yang menggunakan Git Extensions :
Di jendela Komit, pilih file yang ingin Anda komit sebagian, lalu pilih teks yang ingin Anda komit di panel kanan, lalu klik kanan pada pilihan dan pilih 'Tahap dipilih garis' dari menu konteks.
sumber
s
- sangat berguna untuk pementasan bagian file dengan cepat untuk komit.Sama seperti jawaban jdsumsion, Anda juga dapat menyembunyikan pekerjaan Anda saat ini tetapi kemudian menggunakan difftool seperti berbaur untuk menarik perubahan yang dipilih dari simpanan. Dengan begitu Anda bahkan dapat mengedit bakhil secara manual sangat mudah, yang agak menyebalkan ketika di
git add -p
:Menggunakan metode simpanan memberi Anda kesempatan untuk menguji, jika kode Anda masih berfungsi, sebelum Anda komit.
sumber
git commit --amend
, tampaknya Anda tidak dapat menghapus simpanan setelahnya, atau apakah ada cara untuk melakukan ini?Menambahkan pada jawaban sebelumnya, jika Anda lebih suka menggunakan baris perintah, memasukkan
git add -e myfile
memberi Anda pilihan untuk memilih baris demi baris apa yang ingin Anda komit karena perintah ini akan membuka editor dengan perbedaan, seperti:Seperti yang Anda ketahui, baris yang memulai
+
adalah tambahan, baris yang dimulai dengan-
penghapusan. Begitu:-
dengan spasi.
Inilah yang
git add -h
dikatakan tentang menambahkan file dengan cara ini (menambal file):Perhatian: jangan mengubah konten file, ini bukan tempat yang baik untuk melakukannya. Cukup ganti operator dari baris yang dihapus atau ditambahkan.
sumber
Plugin vim-gitgutter dapat membuat stage bakhun tanpa meninggalkan vim editor menggunakan
Selain itu, ia menyediakan fitur keren lainnya seperti kolom tanda berbeda seperti pada beberapa IDE modern
Jika hanya sebagian dari sebongkah yang harus dipentaskan vim-buron
memungkinkan pemilihan rentang visual lalu
:'<,'>diffput
atau:'<,'>diffget
untuk tahap / mengembalikan perubahan garis individual.sumber
git add -p filename.x
Sudah dicoba , tetapi di mac, saya menemukan gitx ( http://gitx.frim.nl/ atau https://github.com/pieter/gitx ) menjadi jauh lebih mudah untuk melakukan persis apa yang saya inginkan.sumber
Dengan TortoiseGit:
sumber
Sudah 10 tahun sejak pertanyaan ini diajukan. Dan saya berharap jawaban ini bermanfaat bagi seseorang. Seperti disebutkan dalam jawaban di sini , di mana GUI bukan pilihan, ekstensi crecord Andrew Shadura membantu membawa jendela ncurses di mana kita dapat memilih jalur yang akan dikomit.
Siapkan ekstensi sebagai berikut:
cd ke git repo Anda dan aktifkan sebagai berikut:
Ini akan memunculkan antarmuka ncurses yang dapat digunakan seperti yang ditunjukkan di bawah ini. Menekan tombol berikut di jendela ncurses akan melakukan tindakan tertentu:
Screencast menunjukkan penggunaan sampel
sumber
Untuk pengguna Atom , paket github termasuk pementasan interaktif, dengan gaya
git gui
. Untuk cara pintas lihat dokumentasi paket .Menggunakan Atom memungkinkan bekerja dengan tema yang memiliki latar belakang gelap (secara default,
git gui
memiliki latar belakang putih).sumber
Untuk emacs ada juga gitsum
sumber
git-meld-index - mengutip dari situs web:
git-meld-index menjalankan bld - atau gt difftool lainnya (kdiff3, difuse, dll.) - untuk memungkinkan Anda untuk secara interaktif melakukan perubahan pada indeks git (juga dikenal sebagai area pementasan git).
Ini mirip dengan fungsi git add -p, dan git add --interactive. Dalam beberapa kasus, berbaur lebih mudah / lebih cepat untuk digunakan daripada git add -p. Itu karena berbaur memungkinkan Anda, misalnya, untuk:
Pemakaian
Di repositori git, jalankan:
Anda akan melihat meld (atau difftool git yang dikonfigurasi) muncul dengan:
KIRI : direktori sementara meneruskan file yang disalin dari pohon kerja Anda
KANAN : direktori sementara dengan isi indeks. Ini juga termasuk file yang belum ada dalam indeks tetapi dimodifikasi atau tidak dilacak dalam copy pekerjaan - dalam hal ini Anda akan melihat konten file dari HEAD.
Edit indeks (sisi kanan) sampai bahagia. Ingatlah untuk menabung saat dibutuhkan.
Setelah selesai, tutup berbaur, dan git-meld-indeks akan memperbarui indeks agar sesuai dengan isi direktori sementara di sisi kanan berbaur yang baru saja Anda edit.
sumber
Jika ada di
Windows
platform, menurut sayagit gui
alat yang sangat bagus untukstage
/commit
beberapa baris dariunstaged
file1. Cowok bijaksana:
unstagged Changes
bagianStage Hunk for commit
2. Garis bijak:
unstagged Changes
bagianStage Lines for commit
3. Jika Anda ingin mem-stage file lengkap kecuali beberapa baris:
unstagged Changes
bagianCtrl+T (Stage file to commit)
Staged Changes
BagianUnStage Lines for commit
sumber
Seperti yang ditunjukkan oleh satu jawaban di atas, Anda dapat menggunakannya
git add --patch filename.txt
atau bentuk pendek
git add -p filename.txt
... tetapi untuk file yang sudah ada di repositori Anda, ada, di s jauh lebih baik menggunakan flag --patch pada perintah commit secara langsung (jika Anda menggunakan versi git yang cukup baru):
git commit --patch filename.txt
... atau, sekali lagi, formulir pendek
git commit -p filename.txt
... dan kemudian menggunakan kunci yang disebutkan, (y / n dll), untuk memilih baris untuk dimasukkan dalam komit.
sumber
git add -p filename.txt
" selain sedikit ruang untuk kesalahan? Jika Anda mengacaukan perubahan sebagian file, membatalkan suatu penambahan lebih baik daripada membatalkan suatu komit.git-cola adalah GUI yang hebat dan juga memiliki fitur bawaan. Cukup pilih garis ke panggung dan tekan S. Jika tidak ada pilihan yang dibuat, bagian lengkapnya dipentaskan.
sumber