Bagaimana Anda memindahkan komit ke area pementasan di git?

143

Jika Anda ingin memindahkan komit ke area pementasan - yang tidak mengikatnya dan memindahkan semua perubahan yang ada di dalamnya ke area pementasan (secara efektif menempatkan cabang di negara bagian yang seharusnya berada sebelum komit) - bagaimana Anda melakukannya? Atau itu sesuatu yang tidak bisa Anda lakukan?

Yang paling dekat yang saya tahu bagaimana melakukannya adalah menyalin semua file yang diubah di komit ke tempat lain, reset cabang ke komit sebelum komit yang Anda coba pindahkan ke area pementasan, pindahkan semua menyalin file kembali ke repositori, dan kemudian menambahkannya ke area pementasan. Ini bekerja, tapi itu bukan solusi yang bagus. Yang ingin saya lakukan hanyalah membatalkan komit dan memindahkan perubahannya ke area pementasan. Bisakah itu dilakukan? Dan jika demikian, bagaimana caranya?

Jonathan M Davis
sumber

Jawaban:

267
git reset --soft HEAD^

Ini akan mengatur ulang indeks Anda ke HEAD^(komit sebelumnya) tetapi membiarkan perubahan Anda di area pementasan.

Ada beberapa diagram berguna dalam git-resetdokumen

Jika Anda menggunakan Windows, Anda mungkin perlu menggunakan format ini:

git reset --soft HEAD~1
Abizern
sumber
18
Jika ini tidak berhasil, coba git reset --soft HEAD~1yang artinya sama tetapi juga berfungsi pada Windows.
Roman Starkov
9
Untuk memperjelas, tilde dan carot memiliki arti berbeda dalam versi git. KEPALA ~ 1 selalu mengikuti orang tua pertama dari sebuah komit, yang mungkin bukan yang Anda inginkan jika komit gabungan yang memiliki banyak orang tua. Mengenai shell Windows cmd, Anda hanya perlu keluar dari carot dengan carot lain misalnya "git reset --soft HEAD ^^" untuk kembali ke "HEAD ^". Ini murni artefak Windows cmd shell, jadi Anda tidak harus melakukan itu jika Anda menggunakan git GUI pada Windows. Tilde dan carot dijelaskan di schacon.github.io/git/git-rev-parse#_specifying_revisions
ahains
Saya menambahkan tautan untuk "diagram praktis". Bisakah Anda dengan cepat memeriksa apakah itu mengarah ke bagian yang Anda maksud? Terima kasih
Neuron
5

Cara Sederhana

  1. File yang dikomit ke Staging Area

    git reset --soft HEAD^1

  2. Staging to UnStage : (gunakan "git reset HEAD ..." untuk unstage)

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

di sini, * -> semua file diakhiri dengan ds.txt ke unstage.

Lihat gambar di bawah ini untuk kejelasan:

masukkan deskripsi gambar di sini

Shiva Nandam Sirmarigari
sumber