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?

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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.