Jawaban:
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.
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 indeksgit 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 juga git 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.
Jika Anda ingin menghapus b dari komit terakhir Anda
git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend
Jika Anda ingin menghapus semua perubahan ke b di komit terakhir Anda
(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
git rm --cached
dan lakukan backup / restore dance (-1).
Alternatif yang tidak memerlukan peretasan indeks, namun tetap mempertahankan pesan komit lama:
$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}
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.
... Then stash/delete b, re-commit..
, di sini bukankah seharusnya kataThen
ituafter
? ---amend
setelah stach / delete b, ...