Saya telah memodifikasi dua file a
, b
pada komit terakhir. Tetapi file b
tidak boleh dilakukan, apa alur kerja untuk mengubah ini?
Perbarui (beberapa tahun kemudian)
Itu sepele untuk menghapusnya dari indeks saja.
Benar: Anda dapat mengatur ulang file ke konten indeksnya dengan cukup mudah, seperti yang disarankan oleh jawaban yang lebih baru (ditulis oleh Matt Connolly ):
git reset HEAD^ path/to/file/to/revert
HEAD^
memungkinkan file untuk mengakses kontennya di komit sebelumnya sebelum yang terakhir.
Maka Anda bisa git commit --amend
, seperti yang saya tulis di bawah ini.
Dengan Git 2.23 (Agustus 2019), Anda mungkin menggunakan perintah barugit restore
git restore --source=HEAD^ --staged -- path/to/file/to/revert
singkat:
git restore -s@^ -S -- path/to/file/to/revert
Sekali lagi, Anda bisa git commit --amend
, seperti yang saya tulis di bawah ini.
Jawaban asli (Januari 2011)
Jika ini adalah komit terakhir Anda (dan Anda belum mendorongnya ke mana pun), Anda dapat mengubahnya :
(simpanan pertama atau simpan b
)
git commit --amend
Kemudian hapus b, komit kembali. Kembalikan b dan Anda selesai.
--amend
Digunakan untuk mengubah ujung cabang saat ini.
Persiapkan objek pohon yang ingin Anda ganti komit terbaru seperti biasa (ini termasuk jalur -i / -o dan eksplisit yang biasa), dan editor log komit diunggulkan dengan pesan komit dari ujung cabang saat ini.
Komit yang Anda buat menggantikan tip saat ini - jika itu gabungan, itu akan membuat orang tua dari tip saat ini sebagai orang tua - sehingga komit teratas saat ini dibuang.
... Then stash/delete b, re-commit..
, di sini bukankah seharusnya kataThen
ituafter
? ---amend
setelah stach / delete b, ...git diff --name-only HEAD^
- (opsional) gunakan untuk membuat daftar file yang diubah dalam komit terakhir.git reset HEAD^ path/to/file/to/revert
- untuk mereset indeks ke versi terakhir, membiarkan copy pekerjaan tidak tersentuh.git commit --amend
- untuk mengubah komitmen terakhir untuk memasukkan perubahan indekssumber
git commit -a --amend
(yaitu jangan menambahkan file) untuk langkah 3, atau Anda akan melakukan perubahan copy pekerjaan Anda yang merupakan pengeditan yang Anda coba hapus. Langkah opsional 2.5 bisa jugagit checkout path/to/file/to/revert
untuk membersihkan copy pekerjaan Anda juga.git rm --cached path/to/file/to/revert
untuk membatalkan penambahan file tanpa menghapusnya dari struktur pohon.Atau jika Anda menggunakan
git gui
, Anda cukup memilih opsi "Amend last commit", file yang ditambahkan muncul di daftar "Staged", klik ikon itu untuk memindahkannya ke daftar "Unstaged" dan komit.sumber
Jika Anda ingin menghapus b dari komit terakhir Anda
Jika Anda ingin menghapus semua perubahan ke b di komit terakhir Anda
sumber
git rm --cached
dan lakukan backup / restore dance (-1).Alternatif yang tidak memerlukan peretasan indeks, namun tetap mempertahankan pesan komit lama:
Saya suka ini karena (a) ia menggunakan perintah yang saya gunakan secara teratur, dan (b) saya bisa lakukan
git add -p
untuk mengetahui dengan tepat apa yang ingin saya komit.sumber