Cara memodifikasi yang sudah ada, unpushed pesan commit?
Saya menulis hal yang salah dalam pesan komit.
Bagaimana saya bisa mengubah pesan? Komit belum mendorong belum.
7670
27
Saya menulis hal yang salah dalam pesan komit.
Bagaimana saya bisa mengubah pesan? Komit belum mendorong belum.
Amandemen yang paling baru-baru ini melakukan pesan
akan buka editor anda, memungkinkan anda untuk mengubah pesan commit yang paling baru-baru ini melakukan. Selain itu, anda dapat mengatur pesan komit langsung di command line dengan:
...namun, hal ini dapat membuat multi-line pesan commit atau kecil koreksi yang lebih rumit untuk masuk.
Pastikan anda don't memiliki kerja copy perubahan dipentaskan sebelum melakukan hal ini atau mereka akan menjadi penting juga. (Belum ter-stage perubahan tidak akan mendapatkan penting.)
Mengubah pesan komit bahwa anda've sudah didorong untuk remote branch
Jika anda've sudah mendorong anda berkomitmen untuk remote cabang, maka anda'll perlu memaksa mendorong commit dengan:
Peringatan: kekuatan yang mendorong akan menimpa branch jauh dengan keadaan lokal anda salah satu. Jika ada yang melakukan pada remote branch bahwa anda don't memiliki cabang lokal anda, anda akan ** kehilangan orang-orang yang berbuat.
Peringatan: berhati-hati tentang amandemen melakukan yang anda telah berbagi dengan orang lain. Mengubah berkomitmen pada dasarnya ulang mereka memiliki berbagai SHA IDs, yang menimbulkan masalah jika orang lain memiliki salinan tua berkomitmen bahwa anda've ditulis ulang. Siapa saja yang memiliki salinan tua komit akan perlu untuk melakukan sinkronisasi pekerjaan mereka dengan yang baru ditulis ulang komit, yang kadang-kadang bisa sulit, jadi pastikan anda melakukan koordinasi dengan orang lain ketika mencoba untuk menulis ulang bersama komit sejarah, atau hanya menghindari penulisan ulang bersama melakukan sama sekali.
Menggunakan interaktif rebase
Pilihan lain adalah dengan menggunakan interaktif rebase. Hal ini memungkinkan anda untuk mengedit pesan apapun yang anda inginkan untuk memperbarui bahkan jika itu's tidak pesan terbaru.
Dalam rangka untuk melakukan Git labu, ikuti langkah-langkah berikut:
Setelah anda squash anda melakukan - pilih
e/r
untuk mengedit pesan:Catatan penting tentang interaktif rebase
Ketika anda menggunakan git rebase -aku KEPALA~X
tidak dapat **** lebih dari
Xmelakukan. Git akan "mengumpulkan" semua komit terakhir
X` melakukan, dan jika ada yang bergabung di suatu tempat di antara yang singkat anda akan melihat semua melakukan sebaik-baiknya, sehingga hasilnya akan menjadi X+.Tip yang baik:
Jika anda harus melakukan itu selama lebih dari satu cabang dan anda mungkin menghadapi konflik ketika mengubah konten, mengatur
git rerere
dan membiarkan Git menyelesaikan konflik itu secara otomatis untuk anda.Dokumentasi
git-commit(1) Halaman Manual
git-rebase(1) Halaman Manual
git-push(1) Halaman Manual
Jika komitmen anda ingin memperbaiki bukan yang paling baru-baru ini:
git rebase --interaktif $parent_of_flawed_commit
Jika anda ingin memperbaiki beberapa cacat komit, lulus induk tertua salah satu dari mereka.
Editor akan datang, dengan daftar semua komit sejak satu yang anda berikan.
Perubahan
memilih
untukmenulis ulang
(atau pada versi lama dari Git, untukedit
) di depan setiap melakukan anda ingin memperbaiki.Setelah anda simpan, Git akan ulangan yang tercantum melakukan.
Untuk setiap melakukan anda ingin reword, Git akan turun kembali ke editor. Untuk masing-masing komit ingin anda mengedit, Git tetes anda ke shell. Jika anda berada di shell:
Mengubah komit dalam cara apapun yang anda suka.
git commit-mengubah
git rebase-terus
Kebanyakan dari urutan ini akan menjelaskan kepada anda oleh output dari berbagai perintah sebagai anda pergi. Itu sangat mudah; anda tidak perlu untuk menghafal hal – hanya ingat bahwa
git rebase --interaktif
memungkinkan anda benar berkomitmen tidak peduli berapa lama yang lalu mereka.Perhatikan bahwa anda tidak akan ingin melakukan perubahan yang anda telah didorong. Atau mungkin anda lakukan, tapi dalam hal ini anda harus berhati-hati untuk berkomunikasi dengan semua orang yang mungkin telah menarik anda melakukan dan melakukan pekerjaan di atas mereka. Bagaimana cara memulihkan/sinkron ulang setelah seseorang mendorong rebase atau reset untuk diterbitkan cabang?
Untuk mengubah commit sebelumnya, membuat perubahan yang anda inginkan dan tahap perubahan tersebut, dan kemudian jalankan
Ini akan membuka file dalam editor teks anda mewakili anda baru melakukan pesan. Itu mulai diisi dengan teks dari pesan komit. Mengubah pesan commit seperti yang anda inginkan, kemudian simpan file dan keluar dari editor anda untuk menyelesaikan.
Untuk mengubah commit sebelumnya dan tetap sama log pesan, jalankan
Untuk memperbaiki kesalahan sebelumnya melakukan dengan menghapus seluruhnya, menjalankan
Jika anda ingin mengedit lebih dari satu pesan komit, menjalankan
(Ganti commit_count dengan jumlah komitmen yang ingin anda edit.) Perintah ini meluncurkan editor anda. Tanda pertama yang melakukan (salah satu yang ingin anda ubah) sebagai "edit" dan bukan "memilih", kemudian simpan dan keluar dari editor. Membuat perubahan yang anda inginkan untuk melakukan dan kemudian jalankan
Catatan: Anda juga dapat "Membuat perubahan yang anda inginkan" dari editor dibuka oleh
git commit-mengubah
Seperti yang sudah disebutkan,
git commit-mengubah
adalah cara untuk menimpa komit terakhir. Satu catatan: jika anda ingin juga menimpa file, perintah akanAnda juga dapat menggunakan git
filter-cabang
untuk itu.It's tidak semudah sepele
git commit-mengubah
, tapi itu's sangat berguna, jika anda sudah memiliki beberapa menyatu setelah anda keliru pesan komit.Catatan bahwa ini akan mencoba untuk menulis ulang setiap komitmen antara
KEPALA
dan cacat melakukan, sehingga anda harus memilih andamsg-filter
perintah yang sangat bijaksana ;-)Saya lebih suka cara ini:
Jika tidak, akan ada yang baru melakukan dengan yang baru berkomitmen ID.
Jika anda menggunakan Git GUI alat, ada tombol yang bernama Mengubah komit terakhir. Klik pada tombol tersebut dan kemudian akan tampilan terakhir anda melakukan file dan pesan. Hanya mengedit pesan itu, dan anda dapat melakukan ini dengan melakukan pesan.
Atau menggunakan perintah ini dari console/terminal:
Anda dapat menggunakan Git rebasing. Misalnya, jika anda ingin mengubah kembali untuk melakukan bbc643cd, menjalankan
Dalam editor default, ubah 'pilih' untuk 'edit' di line dan melakukan yang anda ingin memodifikasi. Membuat perubahan anda dan kemudian panggung mereka dengan
Sekarang anda dapat menggunakan
untuk memodifikasi komit, dan setelah itu
untuk kembali ke sebelumnya kepala komit.
git commit-mengubah
Yang akan menjatuhkan anda ke editor teks anda dan membiarkan anda mengubah terakhir pesan komit.
KEPALA~3
kegit rebase -i
perintah:git rebase -aku KEPALA~3
Jika anda harus mengubah lama pesan komit atas beberapa cabang (yaitu, commit dengan pesan yang keliru hadir di beberapa cabang), anda mungkin ingin menggunakan:
Git akan membuat direktori sementara untuk menulis ulang dan selain itu backup tua referensi dalam
ref/asli/
.-f
yang akan menegakkan pelaksanaan operasi. Hal ini diperlukan jika direktori sementara yang sudah ada atau jika sudah ada referensi yang disimpan di bawahref/asli
. Jika itu tidak terjadi, anda dapat menjatuhkan bendera ini.--
memisahkan filter-cabang pilihan dari revisi pilihan.--
semua akan memastikan bahwa semua cabang dan kategori ditulis ulang.Karena cadangan tua referensi, anda dapat dengan mudah kembali ke keadaan sebelum mengeksekusi perintah.
Katakanlah, anda ingin memulihkan master anda dan mengaksesnya di branch
old_master
:Gunakan
Untuk memahami hal ini secara detail, posting yang sangat baik adalah 4. Menulis Ulang Git Sejarah. Ini juga berbicara tentang ketika tidak digunakan
git commit-mengubah
.Mengubah
Anda memiliki beberapa pilihan di sini. Yang dapat anda lakukan
selama itu's anda komit terakhir.
Interaktif rebase
Sebaliknya, jika itu's tidak komit terakhir, anda bisa melakukan interaktif rebase,
Kemudian di dalam interaktif rebase anda cukup menambahkan edit untuk itu melakukan. Ketika datang, melakukan
git commit-mengubah
dan memodifikasi pesan komit. Jika anda ingin memutar kembali sebelum melakukan point, anda juga bisa menggunakan git reflogdan hapus saja yang melakukan. Kemudian anda hanya melakukan
git commit` lagi.Jika anda menggunakan Git GUI, anda dapat mengubah komit terakhir yang sudah't didorong dengan:
Jika itu's anda komit terakhir, hanya mengubah commit:
(Menggunakan
-o
(--hanya
) bendera untuk memastikan anda mengubah hanya melakukan pesan)Jika itu's terkubur komit, gunakan mengagumkan interaktif rebase:
Menemukan komit anda inginkan, mengubah
biasa
ker
(reword
), dan menyimpan dan menutup file. Selesai!Miniatur Vim tutorial (atau, bagaimana rebase dengan hanya 8 keystrokes
3j
cw
r
EscZZ
):vimtutor
jika anda memiliki waktuh
j
k
l
sesuai dengan gerakan kunci & larr;↓↑→3j
bergerak turun tiga barisaku
untuk masuk ke mode insert — teks yang anda ketik akan muncul di filec
untuk keluar dari modus insert dan kembali ke "normal" modeu
untuk membatalkanr
untuk mengulangdd
,dw
,dl
untuk menghapus baris, kata, atau huruf, masing-masingcc
,cw
,cl
untuk mengubah baris, kata, atau huruf, masing-masing (sama sepertidd
i
)yy
,yw
,yl
copy ("yank") baris, kata, atau huruf, masing-masingp
atauP
untuk paste setelah atau sebelum posisi saat ini, masing-masing:w
Enter untuk menyimpan (menulis) file:q!
Enter untuk keluar tanpa menyimpan:wq
Enter atauZZ
untuk menyimpan dan keluarJika anda mengedit teks yang banyak, kemudian beralih ke Dvorak layout keyboard, belajar untuk touch-type, dan belajar Vim. Apakah itu layak usaha? Ya.
Kiat pro™: Don't takut untuk bereksperimen dengan "berbahaya" perintah yang menulis ulang sejarah* — Git doesn't menghapus anda melakukan selama 90 hari secara default, anda dapat menemukan mereka di reflog:
* Watch out untuk pilihan seperti
--keras
dan--force
meskipun — mereka dapat membuang data. * Juga, don't menulis ulang sejarah pada setiap cabang anda're berkolaborasi.Saya menggunakan Git GUI sebanyak yang saya bisa, dan yang memberikan anda pilihan untuk mengubah komit terakhir:
Juga, `git rebase -aku asal/induk syi'ah yang bagus mantra yang akan selalu hadir dengan komitmen yang telah anda lakukan di atas master, dan memberikan anda pilihan untuk mengubah, menghapus, menyusun ulang atau labu. Tidak perlu untuk mendapatkan hash yang pertama.
Wow, jadi ada banyak cara untuk melakukan hal ini.
Namun cara lain untuk melakukan ini adalah untuk menghapus komit terakhir, namun perlu adanya perubahan sehingga anda tidak't kehilangan pekerjaan anda. Anda kemudian dapat melakukan hal yang lain melakukan dengan dikoreksi pesan. Ini akan terlihat seperti ini:
Saya selalu melakukan hal ini jika saya lupa untuk menambahkan file atau melakukan perubahan.
Ingat untuk menentukan
--lembut
bukan--keras
, jika tidak, anda kehilangan yang melakukan sepenuhnya.Untuk orang yang mencari Windows/Mac GUI untuk membantu dengan mengedit pesan yang lebih tua (yaitu, tidak hanya pesan terbaru), I'd merekomendasikan Sourcetree. Langkah-langkah untuk ikuti di bawah ini.
Untuk melakukan yang belum't belum didorong untuk remote:
Mampu membuat 'project_path/.git/index.lock': File yang ada.
ketika mencoba untuk mengubah beberapa pesan commit pada waktu yang sama. Tidak yakin persis apa masalah ini, atau apakah itu akan diperbaiki dalam versi masa depan dari Sourcetree, tetapi jika hal ini terjadi akan merekomendasikan rebasing mereka satu pada satu waktu (lebih lambat tetapi tampaknya lebih dapat diandalkan)....Atau... untuk melakukan yang telah mendorong:
Ikuti langkah-langkah dalam jawaban, yang mirip dengan di atas, tetapi memerlukan lebih perintah yang akan dijalankan dari baris perintah (
git push origin <cabang> -f
) untuk memaksa mendorong cabang. Saya akan merekomendasikan membaca itu semua dan menerapkan perlu hati-hati!Jika anda hanya ingin mengedit terbaru komit, gunakan:
atau
Tapi jika anda ingin mengedit beberapa berkomitmen berturut-turut, anda harus menggunakan rebasing sebagai gantinya:
Dalam sebuah file, seperti salah satu di atas, menulis
edit/e
atau salah satu dari pilihan lain, dan tekan simpan dan keluar.Sekarang anda'll berada di salah pertama melakukan. Membuat perubahan dalam file, dan mereka'akan dipentaskan secara otomatis untuk anda. Jenis
Simpan dan keluar yang dan jenis
untuk pindah ke seleksi berikutnya sampai selesai dengan semua pilihan anda.
Perhatikan bahwa hal-hal ini mengubah semua hash SHA setelah itu khusus melakukan.
Jika anda hanya ingin mengubah pesan terakhir anda harus menggunakan
--hanya
bendera atau shortcut-o
dengankomit-mengubah
:Hal ini memastikan bahwa anda don't sengaja meningkatkan komit dengan mengadakan barang-barang. Tentu saja itu's terbaik untuk memiliki tepat
$EDITOR
konfigurasi. Kemudian anda dapat meninggalkan-m
opsi keluar, dan Git akan pra-mengisi pesan komit dengan yang lama. Dengan cara ini dapat dengan mudah diedit.