Saya ingin mengembalikan komit tertentu di git. Sayangnya, organisasi kami masih menggunakan CVS sebagai standar, jadi ketika saya komit kembali ke CVS, banyak komitmen git digulung menjadi satu. Dalam hal ini saya ingin memilih komit asli git, tetapi itu tidak mungkin.
Apakah ada pendekatan yang mirip dengan git add --patch
itu yang akan memungkinkan saya mengedit selisih untuk memutuskan bagian mana dari komit untuk dikembalikan?
Jawaban:
Gunakan opsi
--no-commit
(-n
) untukgit revert
, lalu hapus tahapan perubahan, lalu gunakangit add --patch
:Catatan: File yang Anda tambahkan menggunakan git add --patch adalah file yang ingin Anda kembalikan, bukan file yang ingin Anda simpan.
sumber
git reset --hard
untuk membuang perubahan lain yang Anda tidak ingin kembalikan.git reset --hard
berbahaya bagi pemula, karena mungkin kehilangan suntingan yang diinginkan. Alih-alih terbiasagit status
, ini mengisyaratkan untukgit checkout -- FILE..
mengembalikan sesuatu dengan lebih aman.git
;git revert
seharusnya hanya mengambil--patch
argumen.git revert
digunakan untuk mengembalikan seluruh komit. Anda dapat menggunakangit checkout -p
untuk secara interaktif memilih bit untuk dikembalikan.commit
pertama, ataustash
, lalu cobarevert
.Saya berhasil menggunakan yang berikut ini.
Pertama, kembalikan komit penuh (masukkan ke dalam indeks) tetapi jangan komit.
Kemudian secara interaktif hapus perubahan BAIK yang dikembalikan dari indeks
Kemudian komit kebalikan dari perubahan buruk
Akhirnya perubahan GOOD yang dikembalikan (yang telah dipentaskan oleh perintah reset) masih berada di pohon kerja. Mereka perlu dibersihkan. Jika tidak ada perubahan tanpa komitmen lainnya yang tersisa di pohon kerja, ini dapat dilakukan oleh
sumber
reset HEAD .
), karena tidak memerlukan pembersihan akhir dir bekerja?reset -p
lebih pendek daripadareset HEAD
diikuti olehadd -p
. Tapi itu masih membutuhkan pembersihan, karena bakhil "baik" yang telah diatur ulang masih dalam direktori kerja setelah komit.Secara pribadi, saya lebih suka versi ini, yang menggunakan kembali pesan komit yang dibuat secara otomatis dan memberi pengguna kesempatan untuk mengedit dan menempelkan kata "Sebagian" sebelum akhirnya melakukan.
sumber
Larutan:
sumber
Alternatif lain (jika versi file Anda saat ini tidak terlalu jauh dari versi yang ingin Anda kembalikan) adalah untuk mendapatkan hash dari commit segera sebelum yang ingin Anda kembalikan sebagian (dari
git log
). Maka perintah Anda menjadi:Ini memang mengubah file di pohon kerja Anda tetapi tidak membuat komitmen, jadi jika Anda benar-benar menyelesaikannya, Anda bisa mulai lagi dengan
git reset --hard -- file/you/want/to/fix.ext
.sumber
Anda dapat menggunakan git-revert -n, dan kemudian gunakan add --patch untuk memilih bakhil.
sumber