Cara mengembalikan folder ke komit tertentu dengan membuat tambalan

97

Ini sejarah saya untuk folder 'somefolder'

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

Saya ingin mengembalikan beberapa folder kembali ke 'Bug diperbaiki di beberapa folder "komit.

Karena komit kedua melibatkan perubahan di luar folder tertentu, saya tidak ingin mengembalikan komit ini.

Saya kira cara teraman adalah membuat diff / patch antara commit e095 dan 89cd yang berlaku hanya untuk beberapa folder, dan kemudian menerapkan patch itu. Bagaimana saya bisa melakukan itu?

hitfactory
sumber

Jawaban:

155

Anda dapat menggunakan git checkout untuk memperbarui repositori Anda ke keadaan tertentu.

git checkout e095 -- somefolder

Adapun pertanyaan Anda tentang menghasilkan diff, itu juga akan berhasil. Buat saja perbedaan untuk beralih dari keadaan Anda saat ini kembali ke e095:

git diff 89cd..e095 -- somefolder
jamessan
sumber
30
ini tidak menghapus file yang ditambahkan dalam komit itu, git reset e095 -- some/foldersebagai gantinya gunakan
shime
2
Dari git 2.22 Anda dapat menggunakan --no-overlayfor git checkoutsehingga file terlacak yang tidak ada dalam komit yang Anda periksa akan dihapus.
Mariusz Pawelski
53

Anda dapat menggunakan git resetuntuk mengatur ulang indeks yang juga akan termasuk menghapus file yang ditambahkan dalam komit yang lebih baru ( git checkoutitu sendiri tidak melakukan ini):

git reset e095 -- somefolder

Namun git resettidak memperbarui copy pekerjaan dan --hardopsi tidak berfungsi dengan folder. Jadi gunakan git checkoutuntuk membuat copy pekerjaan sama dengan indeks:

git checkout -- somefolder

dan kemudian jika Anda juga ingin menghapus file apa pun yang ditambahkan, Anda juga perlu melakukan:

git clean -fd somefolder
Matthew Buckett
sumber
jawaban ini bekerja untuk saya ketika direktori menyertakan file baru.
Yahoho
2
Jawaban ini jauh lebih baik jika Anda benar-benar menginginkan snapshot repositori yang bersih pada saat itu.
data putri
Jauh lebih baik!
Alexis Pautrot