Bugün git problemi olan bir arkadaşa yardım ederken, daldan tamamen ayrı olması gereken bir dal tanıtmak zorunda kaldım master
. Bu dalın içeriği, dalda geliştirilenden gerçekten farklı bir kökene sahipti master
, ancak master
daha sonra dalda birleştirileceklerdi .
John Wiegley'nin Git'i aşağıdan yukarıya doğru, dalların aslında belirli bir konvansiyonu takip eden bir taahhüde nasıl bir etiket olduğunu ve bir taahhüdün bir dosya ağacına ve isteğe bağlı olarak üst taahhütlere nasıl bağlandığını hatırladım . Git'in tesisatını kullanarak mevcut depoya ebeveynsiz bir taahhüt oluşturmaya gittik:
Dizin içindeki tüm dosyalardan kurtulduk ...
$ git rm -rf .
... bir tarball'dan çıkartılan dizinler ve dosyalar, bunları dizine ekledi ...
$ git add .
... ve bir ağaç nesnesi yarattı ...
$ git write-tree
( git-write-tree
bize oluşturulan ağaç nesnesinin sha1sum'unu anlattı.)
Daha sonra, ebeveyn taahhütlerini belirtmeden ağacı taahhüt ettik ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-tree
oluşturulan taahhüt nesnesinin sha1sum'unu anlattı.)
... ve yeni oluşturulan taahhüdümüzü gösteren yeni bir şube oluşturdu.
$ git update-ref refs/heads/other-branch $COMMIT
Sonunda master
orada çalışmaya devam etmek için şubeye döndük .
$ git checkout -f master
Bu planlandığı gibi çalıştı. Ancak bu, git'i kullanmaya yeni başlayan birine hafifçe koymak için tavsiye edeceğim bir prosedür değil. Depoda şu ana kadar olan her şeyle tamamen ilgisiz yeni bir dal yaratmanın daha kolay bir yolu var mı?