Git kullanarak önceki bir taahhütten dal


1798

N taahhüdüm varsa, n-3 taahhüdünden nasıl branş verebilirim?

Her işin karmasını görebiliyorum.

Yanıtlar:


2547

Şube bir karma yoluyla oluşturabilirsiniz:

git branch branchname <sha1-of-commit>

Veya sembolik bir referans kullanarak:

git branch branchname HEAD~3

Şube oluştururken ödeme yapmak için şunu kullanın:

git checkout -b branchname <sha1-of-commit or HEAD~3>

42
Git 1.8.2, ilk form için kısa sha1'i kullanmama izin verin.
Dan Benamy

53
@MattFenwick Git, kısaltılmış karma havuzda 'benzersiz' olduğu sürece, karma değerine izin verilen her yerde kısaltılmış karmaları kullanmanıza izin verir. Eğer işe yaramadıysa, karmadan başka bir karakter eklemeyi deneyin.
dürtmek

29
Yeni dalı sunucuya doğru şekilde itmek için .. bu son adıma ihtiyaç vardı:git push origin BRANCH_NAME
Gene Bo

3
Bir şube başlatmak için <sha1-of-commit>koşmak git checkout -b <name-of-branch> <sha1-of-commit>ama dal zaten varsagit checkout -B <name-of-branch> <sha1-of-commit>
mostafazh

258

Bunu github.com'da yapmak için:

  1. Projenize gidin.
  2. "Taahhütler" i tıklayın.
  3. Tıklayın <> taahhüt üzerinde size gelen şube istiyoruz ( "tarihin bu noktasında Gözat depo").
  4. Sol üstteki "ağaç: xxxxxx" düğmesini tıklayın. Dil istatistik çubuğunun hemen altında, "Şube Bul veya Oluştur" seçeneğini görürsünüz (oraya yeni bir şube adı yazmanız yeterlidir)Önceki taahhütten şube

4
Soru github ile ilgili değil, git ile ilgili. Git sunucularının çoğu github değildir.
Anders Tornblad

46
Bu Github git değil olmasına rağmen, hala son derece yardımcı oldu!
Liz

Ne yazık ki hala kaçınmak istediğim diğer taahhütlerden gelen değişiklikleri gösteriyor, bu yüzden bu soruyu aradım
Maxim

83

Sihir git reset ile yapılabilir .

  1. Yeni bir şube oluşturun ve bu şubeye geçin (böylece son taahhütlerinizin tümü burada saklanır)

    git checkout -b your_new_branch

  2. Önceki çalışma şubenize geri dönün (master olduğunu varsayalım)

    git checkout master

  3. En son x işlemlerini kaldırın, ustayı temiz tutun

    git reset --hard HEAD~x # in your case, x = 3

Bu andan itibaren, en son x işlemlerinin tümü yalnızca yeni şubede olur, önceki çalışma şubenizde (ana) artık olmaz.


7
Bu aradığım şey buydu çünkü taahhütleri Üstattan kaldırır ve sanki bu taahhütler yapılmadan önce şubeyi yapmayı hatırlamış gibi yapar. Teşekkürler.
superbeck

7
Sadece git reset --hardeğer kökeni taahhüt etmeye
ittiyseniz a'nın

1
Eğer yapabilirsiniz git push --force Zaten şube önce itilmiş olsaydı
milan


74

Hangi taahhüdü önceden dallamak istediğinizden emin değilseniz, taahhütleri kontrol edebilir ve kodlarını inceleyebilirsiniz (kaynak, derleme, test)

git checkout <sha1-of-commit>

dallamak istediğiniz taahhüdü bulduktan sonra, bunu her zamanki gibi bir şube oluşturarak, taahhüt içinde (yani önce ustaya geri dönmeden) yapabilirsiniz:

git checkout -b <branch_name>

22
git checkout -b <branch-name> <sha1-of-commit>

1
Bunun " git branch branchname <sha1-of-commit>" (kabul edilen cevaptan) farkı nedir?
Peter Mortensen

Bilmiyorum. Bence eşdeğerler. Her zaman git checkout -byeni bir dal oluşturmak için kullanıyorum .
Tyler Long

10
stackoverflow.com/a/7987711/3590629 git branch ... dalı oluşturur, ancak sizi geçerli dalda bırakır. git checkout -b ... şubeyi oluşturur ve sizi şubeye geçirir.
esme_louise

9

Github deponuzda bunu yapmanın hızlı bir yolu aşağıdaki gibidir:

  • Şubenizden belirli taahhütleri bulun
  • SHA kimliğinin yanında, 'Tarihin bu noktasında repoya göz at' bağlantısını tıklayın
  • Burada bu taahhütten yeni bir şube oluşturabilirsiniz resim açıklamasını buraya girin

1
Bu aslında modası geçmiş
regetskcob

2
Soru github ile ilgili değil.
Anders Tornblad

8

Basitçe çalıştırın:

git checkout -b branch-name <commit>

Örneğin :

git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8

checkoutParametreyle komut -byeni bir şube yaratacak VE kendisine üzerinize geçecektir


1
Bunu çok beğendim. Teşekkürler
Aptal

çekme isteği ile silinen bir özellik dalının SHA taahhüdüne dayalı bir şube oluşturmak mümkün müdür? Yoksa kaptan çekme talebinden vazgeçmek zorunda mıyım?
user2966445

terminali kullanarak projenizin klasöründe çalıştırın git fetchve git branchkomut verin, ardından özellik dalının mevcut olup olmadığını kontrol edin, bu durumda evetse, elbette silinen dallardan bir dal oluşturamazsınız, ayrıca şube gitti
d1jhoni1b

4

Harika bir soru şudur: --helpGit seçeneğini kullanarak bunu nasıl anlıyorsunuz ? Hadi bunu deneyelim:

git branch --help

Bu çıktıyı görüyoruz:

NAME
       git-branch - List, create, or delete branches    

SYNOPSIS
       git branch [--color[=<when>] | --no-color] [-r | -a]
               [--list] [-v [--abbrev=<length> | --no-abbrev]]
               [--column[=<options>] | --no-column]
               [(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
               [--points-at <object>] [<pattern>...]
       git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
       git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
       git branch --unset-upstream [<branchname>]
       git branch (-m | -M) [<oldbranch>] <newbranch>
       git branch (-d | -D) [-r] <branchname>...
       git branch --edit-description [<branchname>]

Gobbledegook.

Sonraki metinde "taahhüt" kelimesini arayın. Bunu buluyoruz:

   <start-point>
       The new branch head will point to this commit. It may be given as a branch name, a
       commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.

Bir yere gidiyoruz!

Şimdi, gobbledegook'un bu çizgisine odaklanın:

git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]

Bunu buna yoğunlaştırın:

git branch <branchname> [<start-point>]

Ve bitti.


1
Gitmekten nefret ediyorum. Teşekkürler.
Byron Whitlock

4

Eclipse'de bunu yapmak için:

  • "Git Deposunu Keşfetme" Perspektifine gidin.
  • "Etiketler" i genişletin ve dal oluşturmak istediğiniz taahhüdü seçin.
  • İşlemi sağ tıklayın ve "Şube Oluştur" u seçin.
  • Şube adı girin.

Sizin için yerel bir şube oluşturacaktır. Daha sonra değişikliklerinizi her ittiğinizde, şubeniz uzak sunucuya gönderilir.


3

Bunu Stash'da yapabilirsiniz.

  1. İşlemi tıklayın
  2. Ekranın sağ üst tarafında "Bu taahhüdü etiketle" yi tıklayın
  3. Ardından, yeni oluşturduğunuz etiketten yeni bir şube oluşturabilirsiniz.

Bu hangi GUI? GitHub?
ostrichofevil

Atlassian Stash
David Ruan

3

Bunu şu şekilde yapabildim:

git branch new_branch_name `git log -n 1 --skip 3 --format=%H`

Burada atlama değerini girmelisiniz. 0 en son, 1 öncekidir, 2 ondan önceki taahhüttür, vb.


4
Neden sadece kullanmıyorsunuz HEAD~1(burada 1, 1 kesinti belirtir)?
jduncanator

1
Yolunuz seçilen cevap tarafından kapsanır ve iyi çalışır. Benimki seçilen cevaptan farklı bir yol.
Mike Graf

3

Bu, bir komutla dalı oluşturur:

git push origin <sha1-of-commit>:refs/heads/<branch-name>

Bu yolu yukarıda yayınlananlardan daha iyi tercih ederim, çünkü hemen dal oluşturur (daha sonra ekstra bir itme komutu gerektirmez).


3

Sourcetree Kullanımı | En kolay yol.

  • İlk olarak, yeni bir şube yapmak için özel taahhüdü almak istediğiniz şubeye göz atın.
  • Ardından araç çubuğuna bakın, Depo> Şube ... 'yi seçin. Kısayol Command + Shift + B'dir.
  • Ve almak istediğiniz belirli taahhüdü seçin. Ve yeni bir şube adı verin ve bir şube oluşturun!

resim açıklamasını buraya girin


sonunda bu yararlı cevabı buldu. Teşekkürler
Firda Sahidi

1

Ben de öyle yaptım:

C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'

C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
  master
* responsivenavigation

Bu durumda, şube 8a75b001096536b3216022484af3026aa9c7bb5bve eski taahhüt oldu master.


1

Git deposunun belirli bir işlemine git

Bazen bir git deposu üzerinde çalışırken, projenizin belirli bir zamanda anlık görüntüsünü almak için belirli bir işleme (gözden geçirme) geri dönmek istersiniz. Tüm bunları yapmak için, günlükleri komutla kontrol etmeyi bulabileceğiniz taahhüdün SHA-1 hash'ı:

git log --abbrev-commit --pretty=oneline

size tüm taahhütlerin kompakt bir listesini ve SHA-1 karma kısa versiyonunu verecektir.

Artık gitmek istediğiniz taahhüdün karmasını bildiğinize göre, aşağıdaki 2 komuttan birini kullanabilirsiniz:

git checkout HASH

veya

git reset --hard HASH

ödeme

git checkout <commit> <paths>

Git'e verilen yoldaki mevcut yolların durumunu durumlarıyla değiştirmelerini söyler. Yollar dosya veya dizin olabilir.

Şube verilmemişse git, HEAD taahhüdünü üstlenir.

git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.

Hiçbir yol belirtilmezse git HEADverilen işleme geçer (böylece oturduğunuz ve üzerinde çalıştığınız işi değiştirir).

git checkout branch //means switching branches.

Sıfırla

git reset <commit> //re-sets the current pointer to the given commit.

Eğer bir şubedeyseniz (genellikle olmanız gerekir) HEADve bu şube işlemek için taşınır.

Ayrılmış HEADdurumdaysanız, git reset yalnızca hareket eder HEAD. Bir dalı sıfırlamak için, önce şubeyi kontrol edin.

Git reset ve git checkout arasındaki fark hakkında daha fazla bilgi edinmek isterseniz , resmi git blogunu okumanızı tavsiye ederim .


2
Cevabınız için teşekkür ederim, Bilginize: Bu: git log --abbrev-commit --pretty=oneline kısaltması yapılabilirgit log --oneline
Suhaib

0

Tamamla'yı seçin

Git GUI kullanıcıları için tüm geçmişi (gerekirse) görselleştirebilir ve ardından dallamak istediğiniz taahhüdü sağ tıklayıp şube adını girebilirsiniz.

Şube adını girin

Tüm tarihi görselleştirin


Bu, yalnızca kullanıcı Windows ve MAC gibi herhangi bir UI tabanlı işletim sistemi kullanıyorsa çalışır
Saurabhcdt

Doğru. Cevabım özellikle "Git GUI kullanıcıları için ..." sözcükleriyle başlıyor. Herkes için işe yarayacak bir cevap vermedim - zaten yapıldı. Birçok insan için daha kolay olabilecek alternatif bir yöntem verdim. Cevabımın beğenilmemesinin sebebi, bunun herkes için bir çözüm olmaması, ancak zaten birkaç bin vekil ile mevcut olması. Ancak bu benim cevabımı yanlış yapmaz "Git GUI kullanıcıları için!". YENİ ŞUBE OLUŞTUR GUI'de var. Dünyada onu kullanan tek kişi olduğumdan şüpheliyim!
Ivan

0

Visual Studio 2015 ve 2017'de kabul edilen cevabı yapmak için:

Değişikliklerde tıklayın

Değişikliklere tıklayın (yukarıdaki kırmızı ok)

Geçmişi Görüntülemek için İşlemler'i tıklayın

İşlemler'i (yukarıdaki kırmızı ok) tıklayın ve Açılır Menüden Geçmişi Görüntüle'yi tıklayın.

Ve yeni Sekme açılacak:

Geçmiş sekmesi

Kodunuzun geri dönmesini istediğiniz önceki taahhüdü sağ tıklamanız gerekir: önceki taahhüdü sağ tıklayın

Yeni bir şube ve voilá ödeme seçin!

Aşağıda, OP sorununun bir parçası olmasa da, hem çok şey yapıyorum hem de bu en azından benim için bir hile adımı: eğer yeni bir şubeyi kontrol etmeden önceki bir taahhüde geri dönmek istiyorsanız, geri dönme (! ?); --mixed veya --hard'ı yeniden tanımlamayı seçmelisiniz:

önceki taahhüdü sağ tıklayın ve yeniden tanımlayın


Çoğumuz burada İngilizce bilmediğinden veya başka yabancı dil bilmediğinden lütfen cevaplarınızı İngilizce olarak paylaşın.
Shamiul Hasan Rumman

@ShamiulHasanRumman, görüntüleri açıklamak metinde - genelde aşağıda - Öyle, İngilizce Kızıl Ok sivri terimini tercüme Eylemler tıklayın (yukarıda kırmızı ok) O yetmedi mi?
Marcelo Scofano

@MarceloScofano, ekran görüntülerini almadan önce editörü İngilizce olarak değiştirmek zor muydu?
Andrew Surdu

1
@AndreiSurdu: Bunu yapmak için hiç ihtiyaç duymadım, İngilizceye geçmek için ekstra bir paket kurmam gerektiğini umuyordum. Ama haklısın, sadece bir VS yeniden başlatmaya ihtiyacı var, kurulum yok. Boş zaman alır almaz yukarıdaki görüntüleri değiştirmeye çalışacağım.
Marcelo Scofano

0

eğer oldukça basit bir kaynak ağacı kullanırsanız.

  • Yeni bir şube oluşturmanız gereken yerden sağa tıklayın
  • 'Şubeyi' tıklayın
  • Görüntülenen iletişim kutusuna yeni dalın adını yazın ve 'dal oluştur'u tıklayın

0

Komut satırı tabanlı bir çözüm arıyorsanız cevabımı göz ardı edebilirsiniz. GitKraken'i kullanmanızı öneririm . Bu olağanüstü bir git kullanıcı arabirimi istemcisi. Ana sayfada Git ağacını gösterir. Onlara bakabilir ve projede neler olduğunu öğrenebilirsiniz. Belirli bir taahhüdü seçin, sağ tıklayın ve 'Burada bir şube oluştur' seçeneğini seçin. Şube adını girmeniz için bir metin kutusu verecektir. Şube adını girin, 'Tamam'ı seçin ve hazırsınız. Kullanımı gerçekten çok kolay.

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.