Pertanyaan Bagaimana cara memodifikasi komit yang sudah ada dan tidak disambung?


Saya menulis hal yang salah dalam pesan komit. Sebagai alternatif, saya lupa menyertakan beberapa file.

Bagaimana saya bisa mengubah pesan / file komit? Komit belum terdorong.


7680
2017-10-07 15:44


asal


Jawaban:


Mengubah pesan commit terbaru

git commit --amend

akan membuka editor Anda, memungkinkan Anda untuk mengubah pesan commit dari commit terbaru. Selain itu, Anda dapat mengatur pesan commit langsung di baris perintah dengan:

git commit --amend -m "New commit message"

Namun, ini dapat membuat pesan komit multi-garis atau koreksi kecil lebih rumit untuk dimasukkan.

Pastikan Anda tidak memiliki perubahan copy pekerjaan dipentaskan sebelum melakukan ini atau mereka akan berkomitmen juga. (Tidak bertanda perubahan tidak akan dilakukan.)

Mengubah pesan commit yang sudah Anda dorong ke cabang jarak jauh Anda

Jika Anda sudah mendorong komitmen Anda ke cabang jarak jauh, maka Anda akan melakukannya perlu memaksa mendorong komit dengan:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

Peringatan: pemaksaan paksa akan menimpa cabang jarak jauh dengan status lokal Anda. Jika ada commit di cabang terpencil yang tidak Anda miliki di cabang lokal Anda, Anda akan kehilangan mereka yang berkomitmen.

Peringatan: berhati-hatilah tentang mengubah komitmen yang telah Anda bagikan dengan orang lain. Mengubah berkomitmen pada dasarnya penulisan ulang mereka memiliki perbedaan SHA ID, yang menimbulkan masalah jika orang lain memiliki salinan komit lama yang telah Anda tulis ulang. Siapa pun yang memiliki salinan komitmen lama perlu menyinkronkan pekerjaan mereka dengan komitmen Anda yang baru ditulis ulang, yang terkadang sulit, jadi pastikan Anda berkoordinasi dengan orang lain ketika mencoba menulis ulang riwayat komitmen bersama, atau hindari menulis ulang komitmen bersama sama sekali.


Gunakan rebase interaktif

Pilihan lain adalah menggunakan rebase interaktif.
Ini memungkinkan Anda untuk mengedit pesan apa pun yang ingin Anda perbarui meskipun itu bukan pesan terbaru.

Untuk melakukan git squash, 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 menekan komitmen Anda - pilih e/r untuk mengedit pesan

enter image description here

Catatan penting tentang rebase Interaktif

Saat Anda menggunakan git rebase -i HEAD~X bisa ada lebih dari X melakukan. Git akan "mengumpulkan" semua commit pada akhirnya X melakukan dan jika ada penggabungan di suatu tempat di antara rentang yang Anda akan melihat semua commit juga sehingga hasilnya akan menjadi X +.

Kiat bagus:

Jika Anda harus melakukannya untuk lebih dari satu cabang dan Anda mungkin akan menghadapi konflik saat mengubah konten, siapkan git rerere dan biarkan git menyelesaikan konflik tersebut secara otomatis untuk Anda.


Dokumentasi


14790
2018-02-08 04:26



git commit --amend -m "your new message"

2414
2017-10-07 19:52



Jika komitmen yang ingin Anda perbaiki bukan yang terbaru:

  1. git rebase --interactive $parent_of_flawed_commit

    Jika Anda ingin memperbaiki beberapa commit yang cacat, berikan induk dari salah satu yang paling tua.

  2. Editor akan muncul, dengan daftar semua commit sejak yang Anda berikan.

    1. Perubahan pick untuk reword (atau pada versi lama Git, ke edit) di depan setiap commit yang ingin Anda perbaiki.
    2. Setelah Anda menyimpan, Git akan memutar ulang commit yang terdaftar.
       

  3. Untuk setiap komitmen yang Anda inginkan reword, Git akan mengembalikan Anda ke editor Anda. Untuk setiap komitmen yang Anda inginkan sunting, Git menjatuhkanmu ke cangkang. Jika Anda berada di shell:

    1. Ubah komit dengan cara apa pun yang Anda suka.
    2. git commit --amend
    3. git rebase --continue

Sebagian besar urutan ini akan dijelaskan kepada Anda oleh output dari berbagai perintah saat Anda pergi. Sangat mudah, Anda tidak perlu menghafalnya - ingat saja itu git rebase --interactive memungkinkan Anda benar-benar melakukan commit tidak peduli sudah berapa lama mereka.


Perhatikan bahwa Anda tidak akan ingin mengubah commit yang sudah Anda dorong. Atau mungkin Anda melakukannya, tetapi dalam hal ini Anda harus sangat berhati-hati untuk berkomunikasi dengan semua orang yang mungkin telah menarik komitmen Anda dan melakukan pekerjaan di atas mereka. Bagaimana cara memulihkan / mensinkronisasi ulang setelah seseorang mendorong rebase atau menyetel ulang ke cabang yang dipublikasikan?


2294
2017-08-15 21:20



Untuk mengubah komit sebelumnya, buat perubahan yang Anda inginkan dan lakukan perubahan tersebut, lalu jalankan

git commit --amend

Ini akan membuka file di editor teks Anda yang mewakili pesan commit baru Anda. Mulai diisi dengan teks dari pesan commit lama Anda. Ubah pesan commit seperti yang Anda inginkan, lalu simpan file dan keluar dari editor Anda untuk menyelesaikannya.

Untuk mengubah komit sebelumnya dan menyimpan pesan log yang sama, jalankan

git commit --amend -C HEAD

Untuk memperbaiki commit sebelumnya dengan menghapusnya sepenuhnya, jalankan

git reset --hard HEAD^

Jika Anda ingin mengedit lebih dari satu pesan commit, jalankan

git rebase -i HEAD~commit_count

(Menggantikan commit_count dengan jumlah commit yang ingin Anda edit.) Perintah ini meluncurkan editor Anda. Tandai komit pertama (yang ingin Anda ubah) sebagai "edit" alih-alih "pilih", lalu simpan dan keluar dari editor Anda. Buat perubahan yang ingin Anda komit dan kemudian jalankan

git commit --amend
git rebase --continue

Catatan: Anda dapat "Melakukan perubahan yang Anda inginkan" juga dari editor yang dibuka oleh git commit --amend


749
2018-06-06 21:16



Seperti yang sudah disebutkan, git commit --amend adalah cara untuk menimpa commit terakhir. Satu catatan: jika Anda mau juga menimpa file, perintahnya akan

git commit -a --amend -m "My new commit message"

381
2017-09-01 20:35



Anda juga bisa menggunakan git filter-branch untuk itu.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

Itu tidak semudah yang sepele git commit --amend, tetapi ini sangat berguna, jika Anda sudah memiliki beberapa gabungan setelah pesan komit Anda yang salah.

Perhatikan bahwa ini akan mencoba menulis ulang SETIAP commit antara HEAD dan komitmen yang salah, jadi Anda harus memilih Anda msg-filter perintah sangat bijaksana ;-)


346
2018-01-10 14:23



Saya lebih suka cara ini.

git commit --amend -c <commit ID>

Jika tidak, akan ada komitmen baru dengan ID komit baru


306
2017-11-08 03:51



Jika Anda menggunakan alat Git GUI, ada tombol yang bernama ubah komitmen terakhir. Klik pada tombol itu dan kemudian akan menampilkan file commit terakhir Anda dan pesan. Cukup edit pesan itu dan Anda dapat melakukannya dengan pesan komit baru.

Atau gunakan perintah ini dari konsol / terminal:

git commit -a --amend -m "My new commit message"

304
2018-01-22 17:23



Kamu dapat memakai Git rebase. Misalnya, jika Anda ingin memodifikasi kembali untuk melakukan bbc643cd, jalankan

$ git rebase bbc643cd^ --interactive

Di editor default, ubah 'pick' menjadi 'edit' pada baris yang komitnya ingin Anda modifikasi. Buat perubahan Anda dan kemudian pamerkan

$ git add <filepattern>

Sekarang Anda bisa menggunakannya

$ git commit --amend

untuk mengubah komit, dan setelah itu

$ git rebase --continue

untuk kembali ke komit sebelumnya.


279
2017-10-22 11:22