Git, bir depo ilgisiz bir şube tanıtan basit bir yolu var mı?
Git bir sorunu olan bir arkadaşım bugün yardım ederken, tanıtmak zorunda kaldım bir
master
daldan tamamen ayrı olması gereken şube.
Bu şube içeriğini çok farklı bir kökeni vardı
ama olacaktı master
şube geliştirilen olmuştu
daha sonra master
şube birleşti.
John Wiegley Git from the bottom up okuma nasıl hatırladım dalları aslında belli bir izleyen bir taahhüt için bir etiket vardır bir dosya bir ağaca bağlanmış ve isteğe bağlı olarak kaydetme nasıl Kongre ve üst etmiştir. Bu taahhüt bir yetim oluşturmak için gittik mevcut depo gıt tesisatı kullanarak:
Dizindeki tüm dosyaları kurtulduk
$ git rm -rf .
... çıkarılan bir arşivini dizinleri ve dosyaları, eklenen bu dizin ...
$ git add .
... ve oluşturulan nesne bir ağaç
$ git write-tree
(git-write-tree
bizi yaratan ağaç nesnenin sha1sum söyledi.)
O halde, ağaç, üst taahhüt belirtmeden işledik...
$ echo "Imported project foo" | git commit-tree $TREE
(git-commit-tree
bize taahhüt oluşturulan nesnenin sha1sum söyledi.)
... ve yaratılmış bizim için yeni puan yeni bir şube oluşturuldu commit.
$ git update-ref refs/heads/other-branch $COMMIT
Son olarak, master
şube çalışmaları orada devam etmek için döndük.
$ git checkout -f master
Bu planlı olarak çalışmış gibi görünüyor. Ama bu net değil prosedür sadece başlarken birisi için tavsiye ederim git kullanmak, en hafif deyimiyle.Orada bir yaratmanın daha kolay bir yolu yeni olan her şey tamamen ilgisiz şube depodaki o kadar uzağa?
CEVAP
Herkes yeni bu soru geldi diye, yeni bir özellik (beri V1.7.Bu görev daha biraz daha yüksek seviye yapar 2) diğer cevabını.
git checkout
şimdi destekler--orphan
seçeneği. man page:
git checkout [-q] [-f] [-m] --orphan <new_branch> [<start_point>]
Bir yeni oluşturyetimadında şube &; new_branch> lt; başladı &; start_point> lt ve onu geçmek. Bu öncelikle bu yeni bir şube üzerinde yapılan taahhüt ve olacak hiçbir anne olacak yeni bir tarihi kökü tamamen tüm diğer bağlantı kesildi dalları ve taahhüt eder.
Böyle yapmaztam olaraksoru soran Endeksi doldurur, çünkü istedim, ne ve <start_point>
Bu, tüm sonra, ödeme bir komut olduğundan) çalışan ağaç. Sadece başka bir eylem gerekli çalışma ağaç ve dizinden herhangi bir istenmeyen öğeleri kaldırmak için. Ne yazık ki, git reset --hard
işe yaramıyor ama git rm -rf .
yerine (bu diğer cevaplar rm .git/index; git clean -fdx
verilen eşdeğer olduğuna inanıyorum) kullanılabilir.
Özet olarak:
git checkout --orphan newbranch
git rm -rf .
<do work>
git add your files
git commit -m 'Initial commit'
KAFA varsayılan olduğundan <start_point>
belirsiz bıraktım, zaten umurumuzda değil. Bu sıra aslında sadece korkunç tesisat komutları başvurmadan Artem's answer komut dizisi ile aynı şeyi yapar.
Git: çıplak bir depo içinde Aktif Şube...
Anahtar olmadığını kontrol etmek için ...
Bu sözler Gıt ne demek: Depo, şube, kl...
Nasıl svn git remote depo olarak belir...
UİView konumunu değiştirmek için basit...