Saya menulis hal yang salah dalam pesan komit.
Bagaimana saya bisa mengubah pesan? Komit belum mendorong belum.
git commit --amend
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:
git commit --amend -m "New commit message"
...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.)
Jika anda've sudah mendorong anda berkomitmen untuk remote cabang, maka anda'll perlu memaksa mendorong commit dengan:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
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.
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:
// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X
Setelah anda squash anda melakukan - pilih e/r
untuk mengedit pesan:
Ketika anda menggunakan git rebase -aku KEPALA~Xtidak 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+
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.
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
untuk menulis ulang
(atau pada versi lama dari Git, untuk edit
) 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
git commit --amend
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
git commit --amend -C HEAD
Untuk memperbaiki kesalahan sebelumnya melakukan dengan menghapus seluruhnya, menjalankan
git reset --hard HEAD^
Jika anda ingin mengedit lebih dari satu pesan komit, menjalankan
git rebase -aku KEPALA~commit_count
(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
git commit --amend
git rebase --continue
Catatan: Anda juga dapat "Membuat perubahan yang anda inginkan" dari editor dibuka oleh git commit-mengubah
Anda juga dapat menggunakan git filter-cabang
untuk itu.
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
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 anda msg-filter
perintah yang sangat bijaksana ;-)
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:
git commit -a --amend -m "My new commit message"
Anda dapat menggunakan Git rebasing. Misalnya, jika anda ingin mengubah kembali untuk melakukan bbc643cd, menjalankan
$ git rebase bbc643cd^ --interactive
Dalam editor default, ubah 'pilih' untuk 'edit' di line dan melakukan yang anda ingin memodifikasi. Membuat perubahan anda dan kemudian panggung mereka dengan
$ git add <Filepattern>
Sekarang anda dapat menggunakan
$ git commit --amend
untuk memodifikasi komit, dan setelah itu
$ git rebase --continue
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
ke git 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 filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
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 bawah ref/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
:
git checkout -b old_master refs/original/refs/heads/master
Anda memiliki beberapa pilihan di sini. Yang dapat anda lakukan
git commit --amend
selama itu's anda komit terakhir.
Sebaliknya, jika itu's tidak komit terakhir, anda bisa melakukan interaktif rebase,
git rebase -i [branched_from] [hash before commit]
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 itu's anda komit terakhir, hanya mengubah commit:
git commit --amend -o -m "New commit message"
(Menggunakan -o
(--hanya
) bendera untuk memastikan anda mengubah hanya melakukan pesan)
Jika itu's terkubur komit, gunakan mengagumkan interaktif rebase:
git rebase -i @~9 # Show the last 9 commits in a text editor
Menemukan komit anda inginkan, mengubah biasa
ke r
(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 seperti dd
i
)yy
, yw
, yl
copy ("yank") baris, kata, atau huruf, masing-masingp
atau P
untuk paste setelah atau sebelum posisi saat ini, masing-masing:w
Enter untuk menyimpan (menulis) file:q!
Enter untuk keluar tanpa menyimpan:wq
Enter atau ZZ
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:
$ git reset @~3 # Go back three commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
* 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:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
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:
git commit --amend
atau
git commit --amend -m 'one line message'
Tapi jika anda ingin mengedit beberapa berkomitmen berturut-turut, anda harus menggunakan rebasing sebagai gantinya:
git rebase -i <hash of one commit before the wrong commit>
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
git commit --amend
Simpan dan keluar yang dan jenis
git rebase --continue
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
dengan komit-mengubah
:
git commit --amend -o -m "New commit message"
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.