Bagaimana cara mengubah komitmen yang sudah ada dan tidak dicuri?

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

Bagaimana cara mengubah komit pesan / file? Komit belum dimulai.

7676
07 окт. diatur oleh Laurie Young 07 Okt 2008-10-07 18:44 '08 pada 18:44 2008-10-07 18:44
@ 27 jawaban

Perubahan pada pesan komit terbaru

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

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

Sebelum Anda melakukan ini, pastikan Anda tidak memiliki perubahan pada copy pekerjaan, jika tidak mereka akan diperbaiki. (Perubahan yang dilakukan tidak akan diperbaiki.)

Memodifikasi pesan komit yang sudah Anda kirim ke cabang jauh

Jika Anda sudah mendorong komit ke cabang jarak jauh, maka Anda perlu mendorong komit dengan:

SHA yang berbeda, yang menciptakan masalah jika orang lain memiliki salinan komitmen lama yang telah Anda tulis u>

Gunakan rebaz interaktif

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

Untuk membuat git squash, ikuti >

 // X is the number of commits to the last commit you want to be able to edit git rebase -i HEAD~X 

Segera setelah Anda menghancurkan komit Anda, pilih e/r untuk mengedit pesan.

2019

07 окт. Jawabannya diberikan EfForEffort 07 Oktober. 2008-10-07 18:50 '08 pada pukul 18:50 2008-10-07 18:50
2438
08 февр. Jawabannya diberikan lfx_cool 08 Feb. 2010-02-08 07:26 '10 pada 7:26 pagi 2010-02-08 07:26

Jika perbaikan yang ingin Anda perbaiki bukan yang terakhir:

  • git rebase --interactive $parent_of_flawed_commit

    Jika Anda ingin memperbaiki beberapa komit yang salah, berikan kode induk dari yang tertua.

  • Editor muncul dengan daftar semua komitmen sejak Anda memberikannya.

    • Ubah pick to reword (atau Git versi lama, untuk edit ) sebelum perbaikan apa pun yang ingin Anda perbaiki.
    • Setelah menyimpan, Git akan mengu>
  • Untuk setiap komit yang ingin Anda u>

    • Ubah fiksasi dengan cara apa pun.
    • git commit --amend
    • git rebase --continue

Sebagian besar urutan ini akan dijelaskan kepada Anda oleh hasil dari berbagai tim saat dalam perjalanan. Sangat mudah, Anda tidak perlu mengingatnya - ingat saja bahwa git rebase --interactive memungkinkan Anda untuk memperbaikinya, tidak peduli berapa lama mereka.


Perhatikan bahwa Anda tidak ingin mengubah komitmen yang sudah Anda tekan. Atau mungkin Anda akan 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 mengembalikan / menyinkronkan kembali setelah seseorang menyeret rebase atau reset ke utas yang diterbitkan?

2321
07 окт. jawabannya diberikan oleh Aristoteles Pagaltzis 07 Okt 2008-10-07 22:52 '08 pada 10:52 2008-10-07 22:52

Untuk membuat perubahan pada komit sebelumnya, buat perubahan yang diperlukan dan lakukan perubahan ini, lalu jalankan

 git commit --amend -C HEAD 

Untuk memperbaiki komit sebelumnya, sepenuhnya menghapusnya, jalankan

 git rebase -i HEAD~ commit_count 

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

758
16 авг. Jawabannya diberikan oleh Fatih 16 Agustus. 2011-08-16 00:20 '11 pada 0:20 2011-08-16 00:20

Seperti disebutkan, git commit --amend adalah cara untuk menimpa komit terakhir. Satu catatan: jika Anda ingin juga menimpa file , perintahnya adalah

390
07 июня '11 в 0:16 2011-06-07 00:16 jawabannya diberikan oleh John pada 07 Juni '11 di 0:16 2011-06-07 00:16

Anda juga dapat menggunakan filter-branch git filter-branch untuk ini.

01 сент. Jawab Mark 01 Sep 2012-09-01 23:35 '12 pada 23:35 2012-09-01 23:35

Saya lebih suka cara ini.

 git commit --amend -c <commit ID> 

Jika tidak, akan ada komit baru dengan ID komit baru.

312
10 янв. Jawaban yang diberikan oleh krevedko 10 Jan 2013-01-10 17:23 '13 pada 17:23 2013-01-10 17:23

Jika Anda menggunakan alat Git GUI, ada tombol bernama komit terakhir terakhir. Klik tombol ini, dan kemudian tampilkan file dan pesan komit terbaru Anda. Cukup edit pesan ini dan Anda dapat memperbaikinya dengan pesan komit baru.

Atau gunakan perintah ini dari konsol / terminal:

 git commit -a --amend -m "My new commit message" 
309
08 нояб. jawabannya diberikan Akhilraj NS 08 Nov. 2012-11-08 06:51 '12 pada 6:51 pagi 2012-11-08 06:51

Anda dapat menggunakan rebit git . Misalnya, jika Anda ingin mengubah kembali untuk melakukan bbc643cd, jalankan

 $ git rebase bbc643cd^ --interactive 

Di editor default, ubah 'pilih' menjadi 'edit' di baris yang komitnya ingin Anda ubah. Buat perubahan dan kemudian jalankan dengan

 $ git add <filepattern> 

Sekarang kamu bisa menggunakannya

 $ git commit --amend 

untuk mengubah komit, dan setelah itu

 $ git rebase --continue 

untuk kembali ke fiksasi bab sebelumnya.

282
22 янв. jawabannya diberikan oleh Shoaib Ud-Din 22 Jan 2013-01-22 20:23 '13 pada 20:23 2013-01-22 20:23
  • Jika Anda ingin mengubah pesan komit terakhir, ikuti >

     git commit --amend 

    Ini akan membawa Anda ke editor teks Anda dan memungkinkan Anda untuk mengubah pesan terakhir dari komit.

  • Jika Anda ingin mengubah 3 pesan komit terakhir atau pesan komit apa pun ke titik ini, tulis HEAD~3 pada perintah git rebase -i :

     git rebase -i HEAD~3 
275
22 окт. jawaban yang diberikan oleh Heena Hussain 22 Okt 2012-10-22 14:22 '12 jam 2:22 siang 2012-10-22 14:22

Jika Anda perlu mengubah pesan komit lama ke beberapa cabang (mis., Pesan dengan pesan kesalahan ada di beberapa cabang), Anda dapat menggunakan:

256
15 нояб. Jawabannya diberikan oleh Sebers 15 November. 2012-11-15 12:29 '12 pada 12:29 2012-11-15 12:29

penggunaan

 git commit --amend 

Untuk memahami ini secara terperinci, pos yang sangat bagus adalah 4. Timpa riwayat Git . Ini juga memberi tahu Anda saat tidak menggunakan git commit --amend .

221
27 марта '13 в 23:43 2013-03-27 23:43 jawabannya diberikan kulit 27 Maret '13 pada 23:43 2013-03-27 23:43

Ubah

Anda memiliki beberapa opsi. Anda bisa melakukannya

 git commit --amend 

sampai dijalankan terakhir.

Pengalihan interaktif

Jika tidak, jika ini bukan komit terakhir Anda, Anda dapat melakukan reboot interaktif,

 git rebase -i [branched_from] [hash before commit] 

Kemudian di dalam pengalihan interaktif, Anda cukup menambahkan edit ke komit ini. Ketika ini terjadi, lakukan git commit --amend dan ubah pesan komit. Jika Anda ingin kembali ke titik fiksasi ini, Anda juga dapat menggunakan git reflog dan cukup hapus perbaikan ini. Kemudian Anda jalankan git commit lagi.

195
18 янв. Jawabannya diberikan wallerjake 18 Jan 2013-01-18 04:45 '13 pada pukul 4:45 pagi 2013-01-18 04:45

Jika Anda menggunakan Git GUI, Anda dapat mengubah komit terakhir yang tidak diklik:

 Commit/Amend Last Commit 
183
01 дек. Jawabannya diberikan oleh gulchrider 01 Des. 2012-12-01 08:03 '12 pada 8:03 2012-12-01 08:03

Jika ini adalah komit terakhir Anda, perbaiki komit tersebut:

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

(menggunakan flag -o ( --only ) untuk memastikan bahwa Anda hanya mengubah pesan komit)


Jika terlihat seperti komit, gunakan rebase interaktif luar biasa:

 git rebase -i @~9 # Show the last 9 commits in a text editor 

Temukan komit yang diinginkan, ubah pick ke r ( reword ) dan simpan dan tutup file. Selesai!



Miniatur tutorial vim (atau, cara menginstal u>3j cw r Esc ZZ ):

  • Jalankan vimtutor jika Anda punya waktu.
  • h j k l sesuai dengan tombol navigasi
  • Semua perintah mungkin memiliki awalan rentang, misalnya. 3j pindah ke 3 baris
  • i , untuk masuk ke mode penyisipan - teks yang Anda masukkan akan muncul di file
  • Esc atau Ctrl c untuk keluar dari mode penyisipan dan kembali ke mode normal.
  • u membatalkan
  • Ctrl r untuk mengu>
  • dd , dw , dl untuk menghapus baris, kata atau huruf, masing-masing
  • cc , cw , cl untuk mengubah baris, kata, atau huruf, masing-masing (sama seperti dd i )
  • yy , yw , yl untuk menyalin ("yank") baris, kata atau huruf
  • p atau p untuk memasukkan masing-masing setelah atau sebelum posisi saat ini
  • :w Masukkan untuk menyimpan (menulis) file
  • :q! Masuk keluar tanpa menyimpan
  • :wq Enter atau ZZ untuk menyimpan dan keluar

Jika Anda mengedit banyak teks, beralihlah ke tata letak keyboard Dvorak, pelajari tipe sentuh dan pelajari vim. Apakah ini sepadan dengan usaha? Ya



ProTip ™: jangan takut untuk bereksperimen dengan perintah "berbahaya" yang menulis u>

 $ git reset @~3 # go back 3 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 

* Waspadai parameter seperti --hard dan --force , meskipun mereka dapat membuang data.
* Juga jangan menulis u>

170
10 февр. Jawabannya diberikan Zaz 10 Feb. 2015-02-10 03:01 '15 pada 3:01 2015-02-10 03:01

Saya menggunakan Git GUI sebanyak yang saya bisa, dan ini memberi Anda kesempatan untuk mengubah pesan terakhir:

2019

165
05 авг. jawabannya diberikan oleh Havard Graff 05 Agustus. 2013-08-05 02:13 '13 pada 2:13 2013-08-05 02:13

Wow, jadi ada banyak cara untuk melakukan ini.

Cara lain untuk melakukan ini adalah dengan menghapus komit terakhir, tetapi simpan perubahannya sehingga Anda tidak kehi>

135
03 дек. Jawabannya diberikan oleh Radu Murzea 03 Desember. 2013-12-03 00:31 '13 pada 0:31 2013-12-03 00:31

Jika Anda ingin mengubah penggunaan terakhir komit:

 git commit --amend 

atau

124
07 янв. balasan yang diberikan oleh Shubham Chaudhary 07 Jan 2014-01-07 01:03 '14 pada 1:03 2014-01-07 01:03

Bagi mereka yang mencari antarmuka pengguna grafis untuk Windows / Mac untuk membantu mengedit pesan lama (mis., Bukan hanya pesan terbaru), saya akan merekomendasikan SourceTree . >

2019

123
06 нояб. Jawaban diberikan oleh Steve Chambers 06 Nov 2014-11-06 18:01 '14 pada 18:01 2014-11-06 18:01

Jika Anda ingin mengubah pesan terakhir, Anda harus menggunakan flag --only atau -o shortcut-nya dengan commit --amend :

122
23 мая '14 в 11:40 2014-05-23 11:40 membalas David Ongaro pada 23 Mei '14 pukul 11:40 2014-05-23 11:40

Perbarui pesan kesalahan terakhir dengan pesan komit baru dalam satu baris:

 # You can reset your head to n number of commit # NOT a good idea for changing last commit message # but you can get an idea to split commit into multiple commits git reset --soft HEAD^ # it will reset you last commit. Now, you # can re-commit it with new commit message. 

Gunakan reset untuk membagi komit menjadi komit yang lebih kecil.

git reset dapat membantu Anda memecah satu komit menjadi beberapa komit:

99
22 янв. jawabannya diberikan przbadu 22 Jan 2014-01-22 11:57 '14 pada 11:57 2014-01-22 11:57

Ada banyak jawaban untuk pertanyaan ini, tetapi tidak satu pun dari mereka menjelaskan secara rinci bagaimana mengubah pesan fiksasi lama dengan VIM. Saya terjebak mencoba melakukannya sendiri, jadi di sini saya akan memberi tahu Anda secara rinci bagaimana saya melakukannya terutama untuk orang-orang yang tidak memiliki pengalaman dalam VIM!

Saya ingin mengubah lima komitmen terakhir yang telah saya klik di server. Ini cukup "berbahaya" jika orang lain menariknya, Anda dapat merusak barang dengan mengubah pesan komit. Namun, ketika Anda mengerjakan cabang kecil Anda dan yakin bahwa tidak ada yang menariknya, Anda dapat mengubahnya sebagai berikut:

Misalkan Anda ingin mengubah lima commit terakhir Anda, lalu masukkan ini di terminal:

git rebase -i HEAD~5 * Di mana 5 adalah jumlah pesan komit yang ingin Anda ubah. (jadi jika Anda ingin mengubah 10 ke komit terakhir, masukkan 10)

Perintah ini akan mengarahkan Anda ke VIM tempat Anda dapat mengedit riwayat komit Anda. Anda akan melihat 5 komit terakhir di atas:

pick <commit hash> commit message

Alih-alih pick Anda harus menulis reword . Anda dapat melakukan ini dalam VIM dengan mengetikkan i , yang memaksa Anda untuk masuk ke mode INSERT. (Anda dapat melihat bahwa Anda berada dalam mode sisipkan dengan kata INSERT di bawah). Untuk komit, Anda ingin mengubah jenis di reword alih-alih pick

Maka Anda perlu menyimpan dan keluar dari layar ini, Anda melakukan ini dengan terlebih dahulu beralih ke mode perintah dengan menekan tombol esc. (Anda dapat memeriksa bahwa Anda berada dalam mode perintah jika kata INSERT menghi>wq perintah simpan dan keluar adalah wq . Oleh karena itu, jika Anda mengetik :wq youre ont, dia akan benar.

Kemudian VIM akan pergi ke pesan komit yang ingin Anda tulis u>

Kemudian, jika Anda sudah mendorong komitmen salah Anda, Anda perlu mendapatkan git push --force menimpa mereka. Ingat bahwa git push --force adalah hal yang cukup berbahaya, jadi pastikan tidak ada yang menarik dari server, karena Anda menekan komitmen yang salah!

Sekarang Anda telah mengubah komit pesan Anda!

(Seperti yang Anda lihat, saya tidak begitu berpengalaman di VIM, jadi jika saya menggunakan "gaul" yang salah untuk menjelaskan apa yang terjadi, jangan ragu untuk mengoreksi saya!)

82
07 авг. jawabannya diberikan Marijn 07 Agustus. 2014-08-07 12:18 '14 pada 12:18 2014-08-07 12:18

Anda dapat menggunakan git-rebase-reword

Ini dirancang untuk mengedit komit apa saja (bukan hanya yang terakhir), seperti halnya commit --amend

 $ git rebase-reword <commit-or-refname> 

Он назван в честь действия по интерактивной переадресации, чтобы исправить фиксацию: "изменить". См. этот пост и man -section interactive mode-

Contoh:

 $ git rebase-reword b68f560 $ git rebase-reword HEAD^ 
76
ответ дан albfan 21 февр. '15 в 15:21 2015-02-21 15:21

Я добавил псевдоним reci , recm для recommit (amend) it, теперь я могу сделать это с помощью git recm или git recm -m .

 $ vim ~/.gitconfig [alias] ...... cm = commit reci = commit --amend recm = commit --amend ...... 
76
ответ дан Chu-Siang Lai 06 янв. '14 в 10:24 2014-01-06 10:24