Saya telah mengubah beberapa hal selama satu jam terakhir dan melakukan mereka langkah demi langkah, tetapi saya baru sadar bahwa saya lupa menambahkan file yang diubah beberapa komitmen lalu.
Log terlihat seperti ini:
GIT TidyUpRequests u:1 d:0> git log
commit fc6734b6351f6c36a587dba6dbd9d5efa30c09ce
Author: David Klein <>
Date: Tue Apr 27 09:43:55 2010 +0200
The Main program now tests both Webservices at once
commit 8a2c6014c2b035e37aebd310a6393a1ecb39f463
Author: David Klein <>
Date: Tue Apr 27 09:43:27 2010 +0200
ISBNDBQueryHandler now uses the XPath functions from XPath.fs too
commit 06a504e277fd98d97eed4dad22dfa5933d81451f
Author: David Klein <>
Date: Tue Apr 27 09:30:34 2010 +0200
AmazonQueryHandler now uses the XPath Helper functions defined in XPath.fs
commit a0865e28be35a3011d0b6091819ec32922dd2dd8 <--- changed file should go here
Author: David Klein <>
Date: Tue Apr 27 09:29:53 2010 +0200
Factored out some common XPath Operations
Ada ide?
Jawaban:
Gunakan
git rebase
. Secara khusus:git stash
untuk menyimpan perubahan yang ingin Anda tambahkan.git rebase -i HEAD~10
(atau seberapa banyak banyak komitmen yang ingin Anda lihat).a0865...
) untuk diedit dengan mengubah katapick
di awal baris menjadiedit
. Jangan hapus baris lain karena itu akan menghapus komit. [^ Vimnote]git stash pop
git add <file>
.git commit --amend --no-edit
.git rebase --continue
yang akan menulis ulang sisa komit Anda terhadap yang baru.[^ vimnote]: Jika Anda menggunakan
vim
maka Anda harus menekan Inserttombol untuk mengedit, lalu Escdan ketik:wq
untuk menyimpan file, keluar dari editor, dan terapkan perubahannya. Atau, Anda dapat mengkonfigurasi editor git commit yang mudah digunakan dengangit config --global core.editor "nano"
.sumber
git add
.edit
, JANGAN HAPUS komit lain yang tercantum dalam file. Jika ya, komit akan dihapus dan Anda harus mengikuti langkah-langkah ini untuk mendapatkannya kembali.git add .
Untuk "memperbaiki" komit lama dengan perubahan kecil, tanpa mengubah pesan komit dari komit lama, di mana
OLDCOMMIT
ada sesuatu seperti091b73a
:Anda juga dapat menggunakan
git commit --squash=OLDCOMMIT
untuk mengedit pesan komit lama selama rebase.git rebase --interactive
akan memunculkan editor teks (yang dapat dikonfigurasi ) untuk mengonfirmasi (atau mengedit) urutan instruksi rebase . Ada info untuk perubahan instruksi rebase dalam file; cukup simpan dan keluar dari editor (:wq
dalamvim
) untuk melanjutkan rebase.--autosquash
secara otomatis akan menempatkan--fixup=OLDCOMMIT
komit dalam urutan yang diinginkan. Perhatikan bahwa--autosquash
ini hanya valid ketika--interactive
opsi digunakan.^
dalamOLDCOMMIT^
cara itu referensi untuk komit sebelumOLDCOMMIT
.Langkah-langkah di atas baik untuk verifikasi dan / atau memodifikasi urutan instruksi rebase , tetapi juga memungkinkan untuk melompati / mengotomatiskan editor teks rebase interaktif dengan:
GIT_SEQUENCE_EDITOR
ke skrip .Lihat git commit dan git rebase . Seperti biasa, ketika menulis ulang sejarah git , Anda hanya harus memperbaiki atau squash yang belum Anda publikasikan kepada orang lain (termasuk pengguna internet acak dan server yang dibangun).
sumber
--autosquash
hanya valid ketika--interactive
opsi digunakan .git config --global core.editor "pico"
. Ada beberapa cara lain untuk mengkonfigurasi git dan / atau mengubah editor default sistem Anda dan sebagainya.dengan git 1.7, ada cara yang sangat mudah menggunakan
git rebase
:tahapkan file Anda:
buat komit baru dan gunakan kembali pesan komit dari komit "rusak" Anda
tambahkan
fixup!
di baris subjek (atausquash!
jika Anda ingin mengedit commit (pesan)):gunakan
git rebase -i --autosquash
untuk memperbaiki komit Andasumber
You asked me to rebase without telling me which branch you want to rebase against, and 'branch.master.merge'
dan jika saya kemudian menggunakangit rebase -i --autosquash
saya hanya mendapatkannoop
baris subjek, rebasing komit ke dirinya sendiri. Adakah yang saya tahu salah?git rebase -i --autosquash HEAD~10
Anda dapat mencoba
rebase --interactive
sesi untuk mengubah komit lama Anda (asalkan Anda belum mendorong komit tersebut ke repo lain).sumber