Sambil membantu seorang teman dengan masalah git hari ini, saya harus memperkenalkan cabang yang harus benar-benar terpisah dari master
cabang. Isi cabang ini benar-benar memiliki asal yang berbeda dari apa yang telah dikembangkan di master
cabang, tetapi mereka akan digabung ke master
cabang di lain waktu.
Saya ingat dari membaca Git John Wiegley dari bawah ke atas bagaimana cabang pada dasarnya adalah label untuk komit yang mengikuti konvensi tertentu dan bagaimana komit diikat ke pohon file dan, opsional untuk komitmen induk. Kami pergi untuk membuat commit tanpa induk ke repositori yang ada menggunakan pipa git:
Jadi kami menyingkirkan semua file dalam indeks ...
$ git rm -rf .
... mengekstrak direktori dan file dari tarball, menambahkannya ke indeks ...
$ git add .
... dan membuat objek pohon ...
$ git write-tree
( git-write-tree
memberi tahu kami sha1sum dari objek pohon yang dibuat.)
Kemudian, Kami melakukan pohon, tanpa menentukan komitmen orang tua ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-tree
memberi tahu kami sha1sum dari objek commit yang dibuat.)
... dan membuat cabang baru yang menunjuk ke komit kami yang baru dibuat.
$ git update-ref refs/heads/other-branch $COMMIT
Akhirnya, kami kembali ke master
cabang untuk melanjutkan pekerjaan di sana.
$ git checkout -f master
Ini tampaknya telah bekerja sesuai rencana. Tapi ini jelas bukan jenis prosedur yang saya sarankan kepada seseorang yang baru mulai menggunakan git, untuk membuatnya lebih sederhana. Apakah ada cara yang lebih mudah untuk membuat cabang baru yang sepenuhnya tidak terkait dengan semua yang telah terjadi di repositori sejauh ini?
( git checkout master && git merge --no-commit "orphan-branch" )
Beberapa trik serupa akan bekerja menggunakan git-reset atau bermain dengan indeks. Tetapi itu tergantung pada alur kerja yang Anda inginkan.--no-commit
padagit merge
akan mencapai ini. Anda mungkin perlu menindaklanjuti dengangit reset origin/master
begitu komit Anda berikutnya pergi ke tempat yang Anda inginkan, tetapi kemudian file dari cabang yatim Anda akan muncul sebagai "file tidak terlacak" kecuali Anda juga memasukkannya dalam file .gitignore Anda.Dari Buku Komunitas Git :
sumber
rm .git/index
jelek :-)Meskipun solusi dengan
git symbolic-ref
dan menghapus indeks berfungsi, mungkin secara konsep lebih bersih untuk membuat repositori barulalu ambil darinya
Sekarang Anda dapat menghapus / path / ke / tidak terkait
sumber
git branch
ataugit checkout
. Saya senang bahwa git memungkinkan hal semacam ini terjadi, tetapi mengapa tidak semudah itu?git branch
dan beralih di antara merekagit checkout BRANCH_NAME
.Github memiliki fitur yang disebut Halaman Proyek di mana Anda dapat membuat cabang bernama tertentu di proyek Anda untuk menyediakan file yang akan dilayani oleh Github. Instruksi mereka adalah sebagai berikut:
Dari sana Anda memiliki repositori kosong yang kemudian dapat Anda tambahkan konten baru.
sumber
Jawaban yang dipilih saat ini benar, saya hanya akan menambahkannya secara kebetulan ...
Ini sebenarnya persis bagaimana github.com memungkinkan pengguna membuat Halaman Github untuk repo mereka, melalui cabang yatim piatu yang disebut
gh-pages
. Langkah-langkah cantik diberikan dan dijelaskan di sini:https://help.github.com/articles/creating-project-pages- secara manual
Pada dasarnya perintah git untuk mengatur ini adalah sebagai berikut:
git checkout --orphan gh-pages
(buat cabang tanpa orangtua yang disebut gh-pages di repo Anda)git rm -rf .
(menghapus semua file dari cabang pohon kerja)rm '.gitignore'
(bahkan gitignore)Catatan Anda juga dapat menunjuk folder / docs pada repo Anda untuk menjadi sumber "Situs Proyek" yang digunakan Github untuk membangun situs web.
Semoga ini membantu!
sumber
Kadang-kadang saya hanya ingin membuat cabang kosong di proyek secara instan kemudian mulai melakukan pekerjaan, saya hanya akan mengeluarkan perintah berikut:
sumber
Jika konten Anda yang sudah ada sudah berkomitmen, Anda sekarang (Git 2.18 Q2 2018) dapat mengekstraknya ke cabang yatim sendiri, karena penerapan "
git rebase -i --root
" telah diperbarui untuk menggunakan mesin sequencer lebih banyak.Sequencer itu adalah yang sekarang memungkinkan untuk mentransplantasikan seluruh topologi grafik commit di tempat lain .
Lihat komit 8fa6eea , komit 9c85a1c , komit ebddf39 , komit 21d0764 , komit d87d48b , komit ba97aea (03 Mei 2018) oleh Johannes Schindelin (
dscho
) .(Digabung oleh Junio C Hamano -
gitster
- di commit c5aa4bc , 30 Mei 2018)sumber
Ditemukan skrip ini di http://wingolog.org/archives/2008/10/14/merging-in-unrelated-git-branches dan berfungsi dengan sangat baik!
sumber
git fetch $REMOTE $REMOTE_BRANCH:$LOCAL_BRANCH
. Apakah saya melewatkan sesuatu?Dalam versi Git terbaru, setidaknya 2,27, ini dapat dicapai dengan
switch
perintah:Dokumentasi resmi: https://www.git-scm.com/docs/git-switch
sumber