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.

Mengomentari pertanyaan (1)
Larutan

Amandemen yang paling baru-baru ini melakukan pesan

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.)

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:

git push   --force
# Or
git push   -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.


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:

// 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:

Catatan penting tentang interaktif rebase

Ketika anda menggunakan git rebase -aku KEPALA~Xtidak dapat **** lebih dariXmelakukan. Git akan "mengumpulkan" semua komit terakhirX` 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

Komentar (32)
git commit --amend -m "your new message"
Komentar (15)

Jika komitmen anda ingin memperbaiki bukan yang paling baru-baru ini:

  1. git rebase --interaktif $parent_of_flawed_commit

Jika anda ingin memperbaiki beberapa cacat komit, lulus induk tertua salah satu dari mereka.

  1. Editor akan datang, dengan daftar semua komit sejak satu yang anda berikan.

  2. Perubahan memilih untuk menulis ulang (atau pada versi lama dari Git, untuk edit) di depan setiap melakukan anda ingin memperbaiki.

  3. Setelah anda simpan, Git akan ulangan yang tercantum melakukan.

  4. 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:

  5. Mengubah komit dalam cara apapun yang anda suka.

  6. git commit-mengubah

  7. 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?

Komentar (15)

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

Komentar (4)

Seperti yang sudah disebutkan, git commit-mengubah adalah cara untuk menimpa komit terakhir. Satu catatan: jika anda ingin juga menimpa file, perintah akan

git commit -a --amend -m "My new commit message"
Komentar (1)

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 ;-)

Komentar (5)

Saya lebih suka cara ini:

git commit --amend -c 

Jika tidak, akan ada yang baru melakukan dengan yang baru berkomitmen ID.

Komentar (7)

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"
Komentar (1)

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.

Komentar (1)
  1. Jika anda hanya ingin memodifikasi terakhir anda melakukan pesan, kemudian lakukan:

git commit-mengubah

Yang akan menjatuhkan anda ke editor teks anda dan membiarkan anda mengubah terakhir pesan komit.

  1. Jika anda ingin perubahan, terakhir tiga pesan commit, atau pesan commit sampai ke titik itu, pasokan KEPALA~3 ke git rebase -i perintah:

git rebase -aku KEPALA~3

Komentar (2)

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///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
Komentar (1)

Gunakan

git commit --amend

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.

Komentar (4)

Mengubah

Anda memiliki beberapa pilihan di sini. Yang dapat anda lakukan

git commit --amend

selama itu's anda komit terakhir.

Interaktif rebase

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 melakukangit commit` lagi.

Komentar (0)

Jika anda menggunakan Git GUI, anda dapat mengubah komit terakhir yang sudah't didorong dengan:

Commit/Amend Last Commit
Komentar (0)

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 3jcwrEscZZ):

  • Jalankan vimtutor jika anda memiliki waktu
  • hjkl sesuai dengan gerakan kunci & larr;↓↑→
  • Semua perintah dapat diawali dengan "range", misalnya 3j bergerak turun tiga baris
  • aku untuk masuk ke mode insert — teks yang anda ketik akan muncul di file
  • Spasi atau Pilihc untuk keluar dari modus insert dan kembali ke "normal" mode
  • u untuk membatalkan
  • Pilihr untuk mengulang
  • dd, dw, dl untuk menghapus baris, kata, atau huruf, masing-masing
  • cc, cw, cl untuk mengubah baris, kata, atau huruf, masing-masing (sama seperti ddi)
  • yy, yw, yl copy ("yank") baris, kata, atau huruf, masing-masing
  • p atau P untuk paste setelah atau sebelum posisi saat ini, masing-masing
  • :wEnter untuk menyimpan (menulis) file
  • :q!Enter untuk keluar tanpa menyimpan
  • :wqEnter atau ZZ untuk menyimpan dan keluar

Jika 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.

Komentar (2)

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.

Komentar (2)

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.

Komentar (3)

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:

  1. Pastikan anda've penting atau menyimpan semua perubahan saat ini (yaitu, agar tidak ada file yang tercantum dalam "Status File" tab) - tidak't bekerja sebaliknya.
  2. Dalam "Log / History" tab, klik kanan pada entri dengan sebelah garis dalam grafik salah satu di bawah ini komit(s) yang ingin anda edit dan pilih "Rebase anak-anak <melakukan ref> secara interaktif..."
  3. Pilih seluruh baris untuk melakukan pesan yang ingin anda ubah (yaitu, klik pada "Pesan" kolom).
  4. Klik "Edit Pesan" tombol.
  5. Mengedit pesan yang diinginkan pada kotak dialog yang muncul, kemudian klik OK.
  6. Ulangi langkah 3-4 jika ada pesan commit untuk berubah.
  7. Klik OK: Rebasing akan dimulai. Jika semuanya baik-baik, output akan berakhir "Selesai". CATATAN: I've baru-baru ini terlihat gagal dengan Mampu membuat &#39;project_path/.git/index.lock&#39;: 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!

Komentar (1)

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 

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.

Komentar (1)

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.

Komentar (4)