Bagaimana saya bisa memindahkan repositori git saya ke komit tertentu

191

Di repositori git saya, saya membuat 5 commit, seperti di bawah ini di git log saya:

commit 4f8b120cdafecc5144d7cdae472c36ec80315fdc
Author: Michael 
Date:   Fri Feb 4 15:26:38 2011 -0800

commit b688d46f55db1bc304f7f689a065331fc1715079
Author: Michael
Date:   Mon Jan 31 10:37:42 2011 -0800

commit b364f9dcec3b0d52666c4f03eb5f6efb7e1e7bda
Author: Michael
Date:   Wed Jan 26 13:33:17 2011 -0800

commit 4771e26619b9acba3f059b491c6c6d70115e696c
Author: Michael 
Date:   Wed Jan 26 11:16:51 2011 -0800

commit 6e559cb951b9bfa14243b925c1972a1bd2586d59
Author: Michael 
Date:   Fri Jan 21 11:42:27 2011 -0800

Bagaimana saya bisa mengembalikan 4 komit saya sebelumnya secara lokal di cabang? Dengan kata lain, bagaimana saya bisa membuat cabang tanpa 4 commit terakhir saya (anggap saya memiliki SHA dari commit dari git log)?

michael
sumber

Jawaban:

233

Untuk membuat cabang baru (lokal):

  • Dengan hash komit (atau bagian dari itu)

    git checkout -b new_branch 6e559cb
    
  • atau untuk kembali 4 komitmen dari KEPALA

    git checkout -b new_branch HEAD~4
    

Setelah cabang baru Anda dibuat (secara lokal), Anda mungkin ingin meniru perubahan ini pada remote dengan nama yang sama: Bagaimana saya bisa mendorong perubahan saya ke cabang jauh


Untuk membuang tiga komitmen terakhir , lihat jawaban Lunaryorn di bawah ini .


Untuk memindahkan HEAD cabang Anda saat ini ke komit yang ditentukan tanpa membuat cabang baru , lihat jawaban Arpiagar di bawah ini .

Artefacto
sumber
160

Semua perintah di atas membuat cabang baru dan dengan komit terbaru menjadi yang ditentukan dalam perintah, tetapi kalau-kalau Anda ingin cabang Anda saat ini HEADpindah ke komit yang ditentukan, di bawah ini adalah perintah:

 git checkout <commit_hash>

Ini melepaskan dan mengarahkan HEADkomit yang ditentukan dan menyelamatkan dari membuat cabang baru ketika pengguna hanya ingin melihat keadaan cabang sampai komit tertentu.


Anda mungkin ingin kembali ke komit terbaru & memperbaiki KEPALA yang terlepas:

Perbaiki kepala terpisah Git?

arpiagar
sumber
1
Ini akan melepaskan kepala. Tidak mudah.
IgorGanapolsky
bahkan jika <commit_hash>ada di cabang berbeda yang ada di depan?
Ciasto piekarz
Pertanyaan terkait hanya mengatakan untuk git checkout master, bersama satu atau dua kasus tepi yang mungkin berlaku untuk situasi tertentu.
i336_
66

Jika Anda ingin membuang empat commit terakhir, gunakan:

git reset --hard HEAD^^^^

Atau, Anda dapat menentukan hash dari commit yang ingin Anda atur ulang:

git reset --hard 6e559cb
lunaryorn
sumber
4
Ini meninggalkan langkah percabangan. Jika dia menjalankan dengan tepat apa yang diperlihatkan di sini, dia akan secara permanen kehilangan komitmen teratas tersebut.
Jimmy Cuadra
3
Yah, tidak harus secara permanen - seseorang bisa mendapatkan SHA dari kepala sebelumnya melalui git reflogdan mengatur ulang kembali - tetapi itu akan membuangnya, ya.
Amber
1
Jika komit didorong pertama kemudian reset, mereka dapat diambil kembali hanya dengan tarikan.
Rick Smith
17

Cukup checkout komit yang Anda inginkan dari cabang baru Anda dan buat cabang baru

git checkout -b newbranch 6e559cb95
KingCrunch
sumber
0

Bagaimana saya bisa mengembalikan 4 komit saya sebelumnya secara lokal di cabang?

Yang berarti, Anda tidak membuat cabang baru dan masuk ke kondisi terpisah. Cara baru untuk melakukannya adalah:

git switch --detach revison

radzimir
sumber