Komit klik tidak disengaja: ubah git pesan komit

Dalam repo lokal saya, saya punya satu pesan dengan pesan tentang komit yang salah.

Saya sudah memposting pesan yang salah dengan pesan git push .

Sekarang repo jarak jauh (yang di-host di GitHub) juga memiliki pesan komit yang salah.

Saya sudah mencoba git commit --amend , tetapi ternyata tidak akan berhasil untuk saya dalam situasi ini, karena saya membuat komitmen tambahan dengan yang salah.

Bagaimana Anda bisa memperbaiki situasi ini?

63
17 февр. ditetapkan oleh jonny pada 17 Feb 2011-02-17 20:29 '11 pada 20:29 2011-02-17 20:29
@ 4 balasan

Solusi paling sederhana adalah ( tetapi, harap baca seluruh jawaban sebelum melakukan ini ):

  • git rebase -i <hash-of-commit-preceding-the-incorrect-one>
  • Di editor yang terbuka, ubah pick untuk reword di baris untuk memperbaikinya secara salah.
  • Simpan file dan tutup editor.
  • Editor akan terbuka lagi dengan pesan tentang komit yang salah. Perbaiki
  • Simpan file dan tutup editor.
  • git push --force untuk memperbarui git push --force .

Ini berarti Anda akan memposting versi modifikasi dari repositori yang diterbitkan sebelumnya. Jika seseorang menarik atau menarik dari repo Anda di antara Anda, ketika Anda membuat kesalahan dengan pesan yang salah tentang komisi, dan ketika Anda memperbaikinya, maka mereka akan mengalami beberapa kesulitan kemudian. Karena itu, pastikan Anda dapat menerima konsekuensi ini sebelum mencoba melakukannya.

89
17 февр. Jawaban diberikan oleh Dan Molding 17 Feb 2011-02-17 20:50 '11 pada 20:50 2011-02-17 20:50

Alih-alih mengikuti seluruh rute penerusan untuk satu komit:

 git reset --soft head~ git commit -m "The message you wanted to use" git push -f 

Anda dapat melihat parameter di halaman manual git-reset .

Untuk proyek yang sedang Anda kerjakan, perubahan sejarah seharusnya tidak menjadi masalah.

33
17 февр. Abizern menjawab 17 Feb 2011-02-17 21:03 '11 pada 21:03 2011-02-17 21:03

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

 git filter-branch -f --msg-filter 'sed "s/<old message>/<new message>/g"' -- --all 

untuk mengganti pesan komit.

Git akan membuat direktori sementara untuk menimpa dan secara opsional mencadangkan tautan lama ke referensi / asli /.

-f akan menyediakan operasi. Ini diperlukan jika direktori sementara sudah ada atau sudah ada tautan yang disimpan dalam file referensi / asli. Jika tidak, Anda dapat mengatur u>

-- memisahkan opsi percabangan filter dari parameter versi

--all akan memastikan bahwa semua cabang dan tag ditimpa.

Karena cadangan tautan lama Anda, Anda dapat dengan mudah kembali ke status sebelum menjalankan perintah.

Katakanlah Anda ingin memulihkan master Anda dan mengaksesnya di cabang old_master:

 git checkout -b old_master refs/original/refs/heads/master 

Setelah Anda puas dengan perubahan Anda, gunakan git push -f untuk melakukan perubahan pada repo publik Anda.

Harap perhatikan bahwa Anda harus memberi tahu karyawan tentang hal ini, karena semua hash komit yang dimulai dengan yang dimodifikasi pertama telah diubah.

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

Jika Anda tidak menekan kode pada cabang jarak jauh (Github / Bitbucket), Anda dapat mengubah pesan komit pada baris perintah, seperti yang ditunjukkan di bawah ini.

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

Jika Anda bekerja pada cabang tertentu, lakukanlah.

 git commit --amend -m "BRANCH-NAME: new message" 

Jika Anda sudah mengklik kode dengan pesan yang salah, Anda harus berhati-hati saat mengubah pesan. Setelah Anda mengubah pesan komit dan mencoba menekannya lagi, Anda memiliki masalah. Untuk membuatnya lancar, ikuti >Harap baca seluruh jawaban sebelum melakukannya.

 git commit --amend -m "BRANCH-NAME : your new message" git push -f origin BRANCH-NAME # Not a best practice. Read below why? 

Catatan penting :. Saat Anda menekan tombol, Anda mungkin mengalami masalah kode yang dikerjakan pengembang lain di cabang yang sama. Karena itu, untuk menghindari konflik, Anda perlu menarik kode keluar dari cabang Anda, sebelum menekan paksa

  git commit --amend -m "BRANCH-NAME : your new message" git pull origin BRANCH-NAME git push -f origin BRANCH-NAME 

Ini adalah praktik terbaik saat mengubah pesan komit, jika sudah ditekan.

2
13 янв. Jawaban diberikan oleh Packer 13 Jan 2015-01-13 10:08 '15 pada 10:08 2015-01-13 10:08

Pertanyaan lain tentang atau mengajukan pertanyaan