Git veri havuzumu belirli bir işleme nasıl geçirebilirim?


191

Git depomda, git günlüğümde aşağıdaki gibi 5 taahhüt yaptım:

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

Önceki 4 taahhüdümü bir şubede yerel olarak nasıl geri alabilirim? Başka bir deyişle, en son 4 taahhüdüm olmadan nasıl bir şube oluşturabilirim (git log'dan bu taahhüdün SHA'sına sahip olduğumu varsayalım)?

Yanıtlar:


233

Yeni bir şube oluşturmak için (yerel olarak):

  • İşleme karmasıyla (veya bir parçasıyla)

    git checkout -b new_branch 6e559cb
    
  • veya HEAD'den 4 taahhüt

    git checkout -b new_branch HEAD~4
    

Yeni şubeniz oluşturulduktan sonra (yerel olarak), bu değişikliği aynı adda bir uzaktan kumandada çoğaltmak isteyebilirsiniz: Değişikliklerimi uzak bir şubeye nasıl gönderebilirim?


İçin son üç hareketin atarak , bkz aşağıda Lunaryorn cevabını .


İçin yeni bir şube oluşturmadan işlemek belirtilen için geçerli şube HEAD hareketli , bkz aşağıda Arpiagar cevabını .


160

Yukarıdaki tüm komutlar yeni bir dal oluşturur ve en son komut, komutta belirtilen daldır, ancak geçerli dalınızın HEADbelirtilen kesinliğe taşınmasını istiyorsanız , aşağıdaki komut aşağıdadır:

 git checkout <commit_hash>

Bu ayrılıyor ve işaret HEADişlemek Belirttiğiniz ve kullanıcı sadece o belirli taahhüt kadar şube durumunu görüntülemek istediğinde yeni bir şube oluşturmasını kaydeder.


Daha sonra en son işleme geri dönüp ayrılmış HEAD'ı düzeltmek isteyebilirsiniz:

Git müstakil kafasını tamir et.


1
Bu kafayı ayırır. Uygun değil.
IgorGanapolsky

<commit_hash>önde farklı dallarda olsa bile ?
Ciasto piekarz

Bağlantılı soru git checkout master, belirli durumlar için geçerli olabilecek bir veya iki uç vakanın yanı sıra söylüyor .
i336_

66

En son dört komisyonu atmak istiyorsanız, şunu kullanın:

git reset --hard HEAD^^^^

Alternatif olarak, sıfırlamak istediğiniz bir taahhüdün karmasını belirleyebilirsiniz:

git reset --hard 6e559cb

4
Bu dallanma aşamasını dışarıda bırakır. Burada gösterileni tam olarak yönetirse, bu üst taahhütleri kalıcı olarak kaybedecektir.
Jimmy Cuadra

3
Peki, kalıcı olarak değil - bir önceki kafanın SHA'sını git reflogalıp tekrar sıfırlayabilir - ama onları fırlatacaktı, evet.
Amber

1
Taahhütler önce itildikten sonra sıfırlanırsa, sadece bir çekerek tekrar alınabilir.
Rick Smith

17

Yeni şubenizin başlamasını istediğiniz taahhüdü kontrol edin ve yeni bir şube oluşturun

git checkout -b newbranch 6e559cb95

0

Önceki 4 taahhüdümü bir şubede yerel olarak nasıl geri alabilirim?

Yani yeni dal oluşturmuyorsunuz ve müstakil duruma geçmektesiniz. Bunu yapmanın yeni yolu:

git switch --detach revison

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.