Saya menulis hal yang salah dalam pesan komit.
Bagaimana saya bisa mengubah pesan? Komit belum didorong.
Saya menulis hal yang salah dalam pesan komit.
Bagaimana saya bisa mengubah pesan? Komit belum didorong.
Jawaban:
git commit --amend
akan membuka editor Anda, memungkinkan Anda untuk mengubah pesan komit dari komit terbaru. Selain itu, Anda dapat mengatur pesan komit langsung di baris perintah dengan:
git commit --amend -m "New commit message"
... Namun, ini dapat membuat pesan komit multi-baris atau koreksi kecil lebih rumit untuk dimasukkan.
Pastikan Anda tidak memiliki perubahan copy pekerjaan yang dipentaskan sebelum melakukan ini atau mereka akan berkomitmen juga. ( Perubahan yang tidak dipentaskan tidak akan dikomit.)
Jika Anda sudah mendorong komit ke cabang jarak jauh Anda, maka - setelah mengubah komit Anda secara lokal (seperti dijelaskan di atas) - Anda juga harus memaksa mendorong komit dengan:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
Peringatan: mendorong secara paksa akan menimpa cabang jarak jauh dengan keadaan cabang lokal Anda . Jika ada komit di cabang jarak jauh yang tidak Anda miliki di cabang lokal Anda, Anda akan kehilangan komit itu.
Peringatan: berhati-hatilah untuk mengubah komitmen yang telah Anda bagikan dengan orang lain. Amending berkomitmen pada dasarnya menulis ulang mereka untuk memiliki ID SHA yang berbeda , yang menimbulkan masalah jika orang lain memiliki salinan komitmen lama yang telah Anda tulis ulang. Siapa pun yang memiliki salinan komit lama perlu menyinkronkan pekerjaan mereka dengan komit baru Anda yang ditulis ulang, yang kadang-kadang bisa sulit, jadi pastikan Anda berkoordinasi dengan orang lain ketika mencoba untuk menulis ulang riwayat komitmen bersama, atau hanya menghindari penulisan ulang komitmen bersama sama sekali.
Pilihan lain adalah menggunakan rebase interaktif. Ini memungkinkan Anda untuk mengedit pesan apa pun yang ingin Anda perbarui walaupun itu bukan pesan terbaru.
Untuk melakukan Git squash, ikuti langkah-langkah ini:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
Setelah Anda menekan komitmen Anda - pilih e/r
untuk mengedit pesan:
Saat Anda menggunakan git rebase -i HEAD~n
mungkin ada lebih dari n komit. Git akan "mengumpulkan" semua komit di n komit terakhir, dan jika ada penggabungan di antara rentang itu Anda akan melihat semua komit juga, sehingga hasilnya adalah n +.
Jika Anda harus melakukannya selama lebih dari satu cabang dan Anda mungkin menghadapi konflik saat mengubah konten, atur git rerere
dan biarkan Git menyelesaikan konflik tersebut secara otomatis untuk Anda.
git commit --amend
tidak sekuat git rebase -i
.
git commit --amend
dapat memperbaiki (a?) Master komit.
git push -f origin branchname
git push -f
sedikit berbahaya jika orang lain menggunakan repositori yang sama?
git commit --amend -c HEAD
. Ini akan membuka editor yang sudah diisi sebelumnya dengan pesan komit lama Anda, sehingga Anda dapat mengubahnya.
git commit --amend -m "your new message"
Jika komit yang ingin Anda perbaiki bukan yang terbaru:
git rebase --interactive $parent_of_flawed_commit
Jika Anda ingin memperbaiki beberapa komit yang cacat, berikan induk dari yang tertua.
Editor akan muncul, dengan daftar semua komitmen sejak yang Anda berikan.
pick
ke reword
(atau pada Git versi lama, menjadiedit
) di depan setiap komit yang ingin Anda perbaiki.Untuk setiap komit Anda ingin reword , Git akan menjatuhkan Anda kembali ke editor Anda. Untuk setiap komit yang ingin Anda edit , Git menjatuhkan Anda ke dalam shell. Jika Anda berada di shell:
git commit --amend
git rebase --continue
Sebagian besar urutan ini akan dijelaskan kepada Anda oleh output dari berbagai perintah saat Anda pergi. Sangat mudah; Anda tidak perlu mengingatnya - ingat saja bahwa git rebase --interactive
Anda dapat melakukan komitmen tidak peduli berapa lama mereka melakukannya.
Perhatikan bahwa Anda tidak ingin mengubah komit yang sudah Anda tekan. Atau mungkin Anda lakukan, 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 saya memulihkan / menyinkronkan kembali setelah seseorang mendorong rebase atau reset ke cabang yang diterbitkan?
reword
di tempat pick
untuk mengedit pesan log.
$parent_of_flawed_commit
setara dengan $flawed_commit^
.
-p
( --preserve-merges
) jika ada gabungan setelah komit cacat.
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 komit baru Anda. Itu dimulai diisi dengan teks dari pesan komit lama Anda. Ubah pesan komit seperti yang Anda inginkan, lalu simpan file dan keluar dari editor Anda untuk menyelesaikan.
Untuk mengubah komit sebelumnya dan menyimpan pesan log yang sama, jalankan
git commit --amend -C HEAD
Untuk memperbaiki komit sebelumnya dengan menghapus seluruhnya, jalankan
git reset --hard HEAD^
Jika Anda ingin mengedit lebih dari satu pesan komit, jalankan
git rebase -i HEAD~commit_count
(Ganti commit_count dengan jumlah komit yang ingin Anda edit.) Perintah ini meluncurkan editor Anda. Tandai komit pertama (yang ingin Anda ubah) sebagai "edit" dan bukan "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 juga dapat "Membuat perubahan yang Anda inginkan" dari editor yang dibuka oleh git commit --amend
git rebase -i HEAD~commit_count
juga akan memungkinkan Anda untuk mengubah pesan komit dari banyak komitmen yang Anda pilih. Tandai saja komit yang dipilih sebagai "reword", bukan "pick".
git reset --hard
memusnahkan perubahan yang tidak dikomit. Silakan ganti --hard
dengan --soft
.
git reset --hard
adalah perintah yang sepenuhnya sah, tetapi menyesatkan karena diberi pertanyaan. Anda menggunakan --hard
jika Anda melakukan perubahan yang ingin Anda buang, bukan jika Anda salah ketik dalam pesan komit!
Seperti yang telah disebutkan, git commit --amend
adalah cara untuk menimpa komit terakhir. Satu catatan: jika Anda ingin juga menimpa file , perintahnya adalah
git commit -a --amend -m "My new commit message"
git add file.ext
kemudian hanyagit commit --amend
Anda juga bisa menggunakannya git filter-branch
untuk itu.
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
Ini tidak semudah yang sepele git commit --amend
, tetapi sangat berguna, jika Anda sudah memiliki beberapa penggabungan setelah pesan komit yang salah.
Perhatikan bahwa ini akan mencoba untuk menulis ulang setiap komit di antara HEAD
dan komit yang cacat, jadi Anda harus memilih msg-filter
perintah Anda dengan sangat bijaksana ;-)
$flawed_commit^..HEAD
, bukan $flawed_commit..HEAD
. seperti yang dinyatakan oleh halaman manual: « Perintah hanya akan menulis ulang referensi positif yang disebutkan dalam baris perintah (misalnya jika Anda melewati a..b, hanya b yang akan ditulis ulang). »
Saya lebih suka cara ini:
git commit --amend -c <commit ID>
Jika tidak, akan ada komit baru dengan ID komit baru.
-c
melakukan beberapa hal. Ini menggunakan pesan lama secara default, tetapi juga menyalin informasi kepengarangan (orang dan waktu). -C
melakukan hal yang sama kecuali itu tidak meminta Anda untuk mengedit pesan.
fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
Jika Anda menggunakan alat Git GUI, ada tombol bernama Amend commit terakhir . Klik tombol itu dan kemudian akan menampilkan file dan pesan komit terakhir Anda. Cukup edit pesan itu, dan Anda bisa mengkomitnya dengan pesan komit baru.
Atau gunakan perintah ini dari konsol / terminal:
git commit -a --amend -m "My new commit message"
Anda bisa menggunakan Git rebasing . Misalnya, jika Anda ingin memodifikasi 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 Anda dan kemudian panggungkan dengan
$ git add <filepattern>
Sekarang kamu bisa menggunakannya
$ git commit --amend
untuk memodifikasi komit, dan setelah itu
$ git rebase --continue
untuk kembali ke komit kepala sebelumnya.
git commit --amend
pengaruh Anda dapat menggunakan git show
dan itu akan menampilkan pesan baru.
Jika Anda hanya ingin mengubah pesan komit terakhir Anda, maka lakukan:
git commit --amend
Itu akan menjatuhkan Anda ke editor teks Anda dan memungkinkan Anda mengubah pesan komit terakhir.
Jika Anda ingin mengubah tiga terakhir komit pesan, atau salah satu pesan komit sampai saat itu, pasokan HEAD~3
ke git rebase -i
perintah:
git rebase -i HEAD~3
git commit --amend
, dan juga mengatakan bahwa Anda dapat menggunakan git rebase -i HEAD~commit_count
, semua yang Anda lakukan adalah plug in 3
untuk commit_count
.
Jika Anda harus mengubah pesan komit lama melalui beberapa cabang (yaitu, komit dengan pesan salah 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 juga membackup referensi lama di refs/original/
.
-f
akan menegakkan pelaksanaan operasi. Ini diperlukan jika direktori sementara sudah ada atau jika sudah ada referensi yang disimpan di bawah refs/original
. Jika bukan itu masalahnya, Anda dapat menjatuhkan bendera ini.
--
memisahkan opsi cabang-filter dari opsi revisi.
--all
akan memastikan bahwa semua cabang dan tag ditulis ulang.
Karena cadangan referensi lama Anda, Anda dapat dengan mudah kembali ke keadaan 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
git commit --amend
untuk memperbaiki komentar atau menambahkan file saya lupa git add
, tapi hanya pernah sebelumnya saya sudah git push
ed. Saya juga menggunakan git filter-branch
ketika saya benar-benar ingin mengacaukan riwayat versi, tetapi OP tidak menginginkan ini, jadi jawaban ini membutuhkan peringatan kesehatan yang besar - jangan coba ini di rumah, intip !!
Menggunakan
git commit --amend
Untuk memahaminya secara rinci, pos yang sangat baik adalah 4. Menulis Ulang Sejarah Git . Ini juga berbicara tentang kapan tidak digunakan git commit --amend
.
git commit --amend
jawaban sudah diberikan (beberapa kali) sebelum Anda menulis Anda. Mengapa Anda mempostingnya lagi? Jika Anda ingin menambahkan tautan ke "Riwayat Penulisan Ulang Git" Anda bisa mengedit salah satu jawaban yang ada, atau meninggalkan komentar.
Anda memiliki beberapa opsi di sini. Anda dapat melakukan
git commit --amend
selama ini komit terakhir Anda.
Jika tidak, jika itu bukan komit terakhir Anda, Anda dapat melakukan rebase interaktif,
git rebase -i [branched_from] [hash before commit]
Kemudian di dalam rebase interaktif Anda cukup menambahkan edit ke komit itu. Ketika muncul, lakukan git commit --amend
dan ubah pesan komit. Jika Anda ingin mundur sebelum komit itu, Anda juga bisa menggunakan git reflog
dan menghapus komit itu. Kemudian Anda lakukan git commit
lagi.
Jika ini adalah komit terakhir Anda, ubah saja komit:
git commit --amend -o -m "New commit message"
(Menggunakan bendera -o
( --only
) untuk memastikan Anda hanya mengubah pesan komit)
Jika itu adalah komit yang dikubur, gunakan rebase interaktif yang mengagumkan :
git rebase -i @~9 # Show the last 9 commits in a text editor
Temukan komit yang Anda inginkan, ubah pick
ke r
( reword
), dan simpan dan tutup file. Selesai!
Tutorial Miniatur Vim (atau, cara rebase hanya dengan 8 kali penekanan tombol 3j
cw
r
EscZZ
):
vimtutor
jika Anda punya waktuh
j
k
l
sesuai dengan tombol gerakan ←↓↑→3j
Bergerak turun tiga barisi
untuk masuk ke mode penyisipan - teks yang Anda ketik akan muncul di filec
untuk keluar dari mode penyisipan dan kembali ke mode "normal"u
untuk membatalkanr
untuk mengulangdd
, dw
, dl
Untuk menghapus garis, kata, atau huruf, masing-masingcc
, cw
, cl
Untuk mengubah garis, kata, atau huruf, masing-masing (sama sepertidd
i
)yy
, yw
, yl
Untuk menyalin ( "yank") baris, kata, atau huruf, masing-masingp
atau P
menempel masing-masing setelah, atau sebelum posisi saat ini:w
Enter untuk menyimpan (menulis) file:q!
Enter untuk berhenti tanpa menyimpan:wq
Enteratau ZZ
untuk menyimpan dan keluarJika Anda sering mengedit teks, maka beralihlah ke tata letak keyboard Dvorak , belajar mengetik, dan belajar Vim. Apakah ini sepadan dengan usaha? Iya.
ProTip ™: Jangan takut untuk bereksperimen dengan perintah "berbahaya" yang menulis ulang riwayat * - Git tidak menghapus komit Anda selama 90 hari secara default; Anda dapat menemukannya 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
* Hati-hati dengan opsi seperti --hard
dan --force
meskipun - mereka dapat membuang data.
* Juga, jangan menulis ulang sejarah di cabang mana pun Anda berkolaborasi.
nano
? Kita sedang berbicara tentang modifikasi sepele yang perlu dibuat ke file teks, bukan pengkodean hardcore yang akan menghasilkan perang api tentang editor teks "terbaik".
ddjjpZZ
memindahkan komit 2 ke bawah. Tidak ada yang aneh tentang pengetahuan Vim dasar; dibutuhkan 10 menit untuk menjadi lebih nyaman dengan Vim daripada nano.
Jika Anda menggunakan Git GUI, Anda dapat mengubah komit terakhir yang belum didorong dengan:
Commit/Amend Last Commit
Saya menggunakan Git GUI sebanyak yang saya bisa, dan itu memberi Anda opsi untuk mengubah komit terakhir:
Juga, git rebase -i origin/master
adalah mantra yang bagus yang akan selalu memberi Anda komitmen yang telah Anda lakukan di atas master, dan memberi Anda opsi untuk mengubah, menghapus, memesan ulang, atau squash. Tidak perlu menghubungi hash itu terlebih dahulu.
Wow, jadi ada banyak cara untuk melakukan ini.
Namun cara lain untuk melakukan ini adalah dengan menghapus komit terakhir, tetapi simpan perubahannya sehingga Anda tidak akan kehilangan pekerjaan Anda. Anda kemudian dapat melakukan komit lain dengan pesan yang diperbaiki. Ini akan terlihat seperti ini:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
Saya selalu melakukan ini jika saya lupa menambahkan file atau melakukan perubahan.
Ingatlah untuk menentukan --soft
alih-alih --hard
, jika tidak, Anda akan kehilangan komit sepenuhnya.
git commit --amend
kecuali bahwa itu adalah proses 2 langkah.
--amend
akan menyimpan informasi penulis, tetapi pertanyaannya hanya meminta untuk mengubah pesan.
Bagi siapa pun yang mencari Windows / Mac GUI untuk membantu mengedit pesan lama (yaitu bukan hanya pesan terbaru), saya akan merekomendasikan Sourcetree . Langkah-langkah untuk diikuti di bawah ini.
Untuk komit yang belum didorong ke remote:
Unable to create 'project_path/.git/index.lock': File exists.
ketika mencoba mengubah beberapa pesan komit pada saat yang bersamaan. Tidak yakin persis apa masalahnya, atau apakah akan diperbaiki dalam versi Sourcetree yang akan datang, tetapi jika ini terjadi akan merekomendasikan untuk mengembalikannya satu per satu (lebih lambat tetapi tampaknya lebih dapat diandalkan).... Atau ... untuk komitmen yang sudah didorong:
Ikuti langkah-langkah dalam jawaban ini , yang mirip dengan di atas, tetapi memerlukan perintah lebih lanjut untuk dijalankan dari baris perintah ( git push origin <branch> -f
) untuk memaksa-mendorong cabang. Saya akan merekomendasikan membaca semuanya dan menerapkan kehati-hatian yang diperlukan!
Jika Anda hanya ingin mengedit komit terbaru, gunakan:
git commit --amend
atau
git commit --amend -m 'one line message'
Tetapi jika Anda ingin mengedit beberapa komit berturut-turut, Anda harus menggunakan rebasing sebagai gantinya:
git rebase -i <hash of one commit before the wrong commit>
Dalam sebuah file, seperti yang di atas, tulis edit/e
atau salah satu opsi lain, dan tekan save and exit.
Sekarang Anda akan berada di komit yang salah pertama. Buat perubahan pada file, dan mereka akan secara otomatis dipentaskan untuk Anda. Tipe
git commit --amend
Simpan dan keluar dan ketik
git rebase --continue
untuk pindah ke pilihan berikutnya sampai selesai dengan semua pilihan Anda.
Perhatikan bahwa hal-hal ini mengubah semua hash SHA Anda setelah komit tertentu.
Jika Anda hanya ingin mengubah pesan terakhir Anda, Anda harus menggunakan --only
bendera atau pintasannya -o
dengan commit --amend
:
git commit --amend -o -m "New commit message"
Ini memastikan bahwa Anda tidak secara tidak sengaja meningkatkan komitmen Anda dengan hal-hal yang dipentaskan. Tentu saja yang terbaik adalah memiliki $EDITOR
konfigurasi yang tepat . Kemudian Anda dapat meninggalkan -m
opsi keluar, dan Git akan mengisi awal pesan komit dengan yang lama. Dengan cara ini dapat diedit dengan mudah.
git commit --amend
. Pertanyaannya sangat spesifik, karena itu lebih lama! = Lebih baik. Penyebutan -o
bendera yang tegas mungkin akan dimakamkan di sisa informasi. Saya juga tidak nyaman mengedit jawaban yang sudah memiliki banyak suara.
--only
opsi dengan --amend
tersedia sejak git 1.3.0 itu tidak bekerja dengan benar sampai diperbaiki di 1.7.11.3 ( ea2d4ed35902ce15959965ab86d80527731a177c ). Jadi jawaban bek kanan pada tahun 2008 mungkin akan menjadi sesuatu seperti: git stash; git commit --amend; git stash pop
.
Perbarui pesan komit terakhir yang salah dengan pesan komit baru dalam satu baris:
git commit --amend -m "your new commit message"
Atau, coba Git reset seperti di bawah ini:
# 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.
git reset
dapat membantu Anda membagi satu komit menjadi beberapa komit juga:
# Reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (You can reset multiple commit by doing HEAD~2(no. of commits)
# Now, reset your head for splitting it to multiple commits
git reset HEAD
# Add and commit your files separately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"
git add config/
git commit -m "add all files in config directory"
Di sini Anda telah berhasil membagi komit terakhir Anda menjadi dua komit.
git commit --amend
, persis seperti yang dikatakan di bagian atas pilih jawaban . Selain itu, git reset --soft HEAD^
berfungsi secara identik dengan pengaturan ulang lunak dalam jawaban sebelumnya , karena mereka mengatur ulang kembali ke komit induk pertama.
git reset
solusi hanya untuk memberikan ide untuk membagi satu pesan komit menjadi beberapa pesan komit. Karena, saya telah menghadapi masalah itu ketika, saya mulai menggunakannya git
. Terkadang, ini bisa sangat membantu. :)
Pada pertanyaan ini ada banyak jawaban, tetapi tidak satupun dari mereka menjelaskan dengan sangat rinci bagaimana mengubah pesan komit yang lebih lama menggunakan Vim . Saya terjebak mencoba melakukan ini sendiri, jadi di sini saya akan menuliskan secara rinci bagaimana saya melakukan ini terutama untuk orang-orang yang tidak memiliki pengalaman dalam Vim!
Saya ingin mengubah lima komit terbaru yang sudah saya dorong ke server. Ini cukup 'berbahaya' karena jika orang lain sudah menarik dari ini, Anda dapat mengacaukan semuanya dengan mengubah pesan komit. Namun, ketika Anda mengerjakan cabang kecil Anda sendiri dan yakin tidak ada yang menariknya, Anda bisa mengubahnya seperti ini:
Katakanlah Anda ingin mengubah lima commit terakhir Anda, dan kemudian Anda ketik 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 komit terakhir, Anda ketikkan 10).
Perintah ini akan membawa Anda ke Vim di sana Anda dapat 'mengedit' riwayat komit Anda. Anda akan melihat lima komit terakhir di atas seperti ini:
pick <commit hash> commit message
Alih-alih pick
Anda perlu menulis reword
. Anda dapat melakukan ini di Vim dengan mengetik i
. Itu membuat Anda masuk ke mode insert . (Anda melihat bahwa Anda sedang dalam mode insert dengan kata INSERT di bagian bawah.) Untuk komit Anda ingin perubahan, ketik reword
bukannyapick
.
Maka Anda perlu menyimpan dan keluar dari layar ini. Anda melakukannya dengan terlebih dahulu masuk ke 'mode-perintah' dengan menekan Esctombol (Anda dapat memeriksa bahwa Anda berada dalam mode-perintah jika kata Sisipkan di bagian bawah telah hilang). Kemudian Anda bisa mengetikkan perintah dengan mengetik :
. Perintah untuk menyimpan dan keluar adalah wq
. Jadi, jika Anda mengetik :wq
Anda berada di jalur yang benar.
Kemudian Vim akan membahas setiap pesan komit yang ingin Anda ulang, dan di sini Anda benar-benar dapat mengubah pesan komit. Anda akan melakukan ini dengan masuk ke mode penyisipan, mengubah pesan komit, masuk ke mode-perintah, dan menyimpan dan keluar. Lakukan ini lima kali dan Anda kehabisan Vim!
Kemudian, jika Anda sudah mendorong komitmen yang salah, Anda harus git push --force
menimpanya. Ingatlah bahwa itu git push --force
adalah hal yang cukup berbahaya untuk dilakukan, jadi pastikan tidak ada yang menarik dari server karena Anda salah menekan komitmen!
Sekarang Anda telah mengubah pesan komit Anda!
(Seperti yang Anda lihat, saya tidak berpengalaman dalam Vim, jadi jika saya menggunakan 'istilah' yang salah untuk menjelaskan apa yang terjadi, jangan ragu untuk mengoreksi saya!)
<nitpick>
Tidak ada "utas" di Stack Overflow, karena ini bukan forum diskusi, hanya ada "pertanyaan", "jawaban", dan "pos". </nitpick>
. Juga, tidak semua versi Vim sama, tidak semua versi akan membiarkan Anda menghapus karakter dalam mode penyisipan (masuk akal, kan?). Jika Anda ingin selalu dapat menghapus karakter di Vim, X
dan x
akan melakukannya (sedikit x
menghapus karakter di depan kursor, X
akan menghapus di belakang). Jika Anda melakukan kesalahan, Anda dapat menggunakan u
berulang kali untuk membatalkan. Akhirnya, r
adalah singkatan untuk reword
editor rebase interaktif.
cw
diketik di awal (meskipun pertanyaannya bukan tentang vim, saya setuju).
nano
atau mcedit Midnight Commander.
Anda dapat menggunakan git-rebase-reword
Ini dirancang untuk mengedit komit (tidak hanya bertahan) dengan cara yang sama commit --amend
$ git rebase-reword <commit-or-refname>
Itu dinamai setelah aksi rebase interaktif untuk mengubah komit: "reword". Lihat posting ini dan pria -bagian mode-interaktif
Contoh:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
g c; g rb -i @~9
(komit dan rebase), pindahkan komit baru ke tempat yang saya inginkan, ubah commit
ke f
( fixup
), dan simpan. Jika Anda menginginkan sesuatu yang lebih cepat dari itu, Anda bisa alias git commit --fixup=<commit>; git rebase -i --autosquash <commit>^
Saya telah menambahkan alias reci
dan recm
untuk recommit (amend)
itu. Sekarang saya bisa melakukannya dengan git recm
atau git recm -m
:
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
Saya menyadari bahwa saya telah mendorong komit dengan kesalahan ketik di dalamnya. Untuk membatalkan, saya melakukan hal berikut:
git commit --amend -m "T-1000, advanced prototype"
git push --force
Peringatan: memaksa mendorong perubahan Anda akan menimpa cabang jarak jauh dengan cabang lokal Anda. Pastikan Anda tidak akan menimpa apa pun yang ingin Anda simpan. Juga berhati-hatilah untuk memaksakan komit yang diubah (ditulis ulang) jika ada orang lain yang berbagi cabang dengan Anda, karena mereka harus menulis ulang sejarah mereka sendiri jika mereka memiliki salinan komit lama yang baru saja Anda tulis ulang.
Saya suka menggunakan yang berikut ini:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
Jika Anda belum mendorong kode ke cabang jarak jauh Anda ( GitHub / Bitbucket ), Anda dapat mengubah pesan komit pada baris perintah seperti di bawah ini.
git commit --amend -m "Your new message"
Jika Anda bekerja pada cabang tertentu, lakukan ini:
git commit --amend -m "BRANCH-NAME: new message"
Jika Anda sudah mendorong kode dengan pesan yang salah, dan Anda harus berhati-hati saat mengubah pesan. Yaitu, setelah Anda mengubah pesan komit dan mencoba mendorongnya lagi, Anda akhirnya memiliki masalah. Untuk membuatnya lancar, ikuti langkah-langkah ini.
Harap baca seluruh jawaban saya 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 menggunakan push paksa secara langsung, Anda mungkin berakhir dengan masalah kode yang sedang dikerjakan pengembang lain di cabang yang sama. Jadi untuk menghindari konflik tersebut, Anda perlu menarik kode dari cabang Anda sebelum melakukan push force :
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 didorong.