Buat cabang di Git dari cabang lain

989

Saya memiliki dua cabang: master dan dev

Saya ingin membuat "cabang fitur" dari cabang dev .

Saat ini di dev cabang, saya lakukan:

$ git checkout -b myfeature dev

... (beberapa pekerjaan)

$ git commit -am "blablabla"
$ git push origin myfeature

Tetapi, setelah memvisualisasikan cabang saya, saya mendapat:

--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**

Maksud saya, cabang itu tampaknya bergabung, dan saya tidak mengerti mengapa ...

Apa yang saya lakukan salah?

Bisakah Anda jelaskan saya bagaimana Anda bercabang dari cabang lain dan mendorong kembali ke repositori jauh untuk cabang fitur?

Semua itu dalam model percabangan seperti yang dijelaskan di sini .

revohsalf
sumber

Jawaban:

1431

Jika Anda menyukai metode di tautan yang Anda poskan, lihat di Git Flow .

Seperangkat skrip yang ia buat untuk alur kerja itu.

Tetapi untuk menjawab pertanyaan Anda:

$ git checkout -b myFeature dev

Membuat cabang MyFeature dari dev. Lakukan pekerjaanmu lalu

$ git commit -am "Your message"

Sekarang gabungkan perubahan Anda ke dev tanpa fast-forward

$ git checkout dev
$ git merge --no-ff myFeature

Sekarang dorong perubahan ke server

$ git push origin dev
$ git push origin myFeature

Dan Anda akan melihatnya seperti yang Anda inginkan.

Abizern
sumber
32
apa pentingnya mendorong myFeaturesetelah digabungkan dengan kecerdasan dev?
Alexander Suraphel
3
@ spartacus Jika myFeaturecabang didorong ke server sebelum penggabungan, maka tidak ada. Tetapi jika myFeaturebelum didorong ke server dan Anda ingin itu muncul di server, Anda harus mendorongnya appart.
xOneca
15
adalah git checkout -b myFeature devsama dengan 3 perintah ini: git checkout dev, kemudian git branch myFeature, dan kemudian git checkout myFeature?
Kevin Meredith
3
Ya, atau memang seharusnya begitu. Apakah Anda melihat sesuatu yang berbeda?
Abizern
33
Untuk mengklarifikasi bagi pemula lainnya, inilah yang --no-fftampak seperti penggabungan
A__
407

Jika Anda ingin membuat cabang baru dari salah satu cabang yang ada di Git, cukup ikuti opsi.

Pertama-tama ubah / checkout ke cabang dari tempat Anda ingin membuat cabang baru. Misalnya, jika Anda memiliki cabang berikut seperti:

  • menguasai
  • dev
  • branch1

Jadi jika Anda ingin membuat cabang baru bernama "subbranch_of_b1" di bawah cabang bernama "branch1" ikuti langkah-langkah:

  1. Periksa atau ubah menjadi "branch1"

    git checkout branch1
    
  2. Sekarang buat cabang baru Anda yang disebut "subbranch_of_b1" di bawah "branch1" menggunakan perintah berikut.

    git checkout -b subbranch_of_b1 branch1
    

    Di atas akan membuat cabang baru bernama subbranch_of_b1 di bawah branch1 cabang (perhatikan bahwa branch1dalam perintah di atas tidak wajib karena KEPALA saat ini menunjuk ke sana, Anda dapat tepat itu jika Anda berada di cabang yang berbeda).

  3. Sekarang setelah bekerja dengan subbranch_of_b1 Anda dapat melakukan dan mendorong atau menggabungkannya secara lokal atau jarak jauh.

Contoh Ilustrasi Grafis Membuat Cabang di Bawah Cabang lain

dorong subbranch_of_b1 ke jarak jauh

 git push origin subbranch_of_b1 
Praveen George
sumber
7
bagaimana cara mendorong subbranch_of_b1 ke jarak jauh ??
user269867
13
@ user269867: "git push origin subbranch_of_b1" akan melakukan pekerjaan ini untuk Anda.
Praveen George
4
Sekarang, jika saya mendorong perubahan ke master, apakah itu akan terjadi di branch1 secara otomatis?
Master Yoda
2
perhatikan bahwa branch1 dalam perintah di atas tidak wajib karena HEAD saat ini menunjuk ke sana, Anda dapat mengaturnya jika Anda berada di cabang yang berbeda meskipun itulah yang saya cari
felipsmartins
10
Saya datang ke sini bertanya-tanya apakah git checkout -b some-branchini singkatan git checkout -b some-branch master. Ternyata itu git checkout -b some-branchadalah singkatan untukgit checkout -b some-branch <current_active_branch>
Frank Henard
45

Buat Cabang

  • Buat cabang saat cabang utama dicentang. Komit di sini berkomitmen akan disinkronkan ke cabang yang Anda buat.

    $ git branch branch1

  • Buat cabang saat branch1 dicentang. Di sini, commit di branch1 akan disinkronkan ke branch2

    $ git branch branch2


Periksa Cabang

git checkout beralih perintah cabang atau mengembalikan file pohon yang berfungsi

  • $ git checkout branchname

Mengganti Nama Cabang

  • $ git branch -m branch1 newbranchname

Hapus Cabang

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete ( paksaan penghapusan tanpa memeriksa status gabungan )

Buat dan Ganti Cabang

  • $ git checkout -b branchname

Cabang yang sepenuhnya termasuk

  • $ git branch --merged


************************** Perbedaan Cabang [git diff branch1..branch2] ************** **********

Perbedaan multiline
  • $ git diff master..branch1
Perbedaan singleline
  • $ git diff --color-words branch1..branch2
Gnanasekar S
sumber
1
Juga setelah mengganti nama penggunaan cabang git push origin :old-name new-nameuntuk menghapus cabang jarak jauh nama lama dan mendorong cabang lokal nama baru.
95faf8e76605e973
13

Lakukan pekerjaan simultan di devcabang. Apa yang terjadi adalah bahwa dalam skenario Anda, cabang fitur bergerak maju dari ujung cabang dev, tetapi cabang dev tidak berubah. Lebih mudah untuk menggambar sebagai garis lurus, karena dapat dianggap sebagai gerak maju. Anda membuatnya ke titik A pada dev, dan dari sana Anda hanya melanjutkan pada jalur paralel. Kedua cabang belum benar-benar menyimpang.

Sekarang, jika Anda membuat komit pada dev, sebelum penggabungan, Anda akan mulai lagi pada komit yang sama, A, tetapi sekarang fitur akan pergi ke C dan dev ke B. Ini akan menunjukkan pemisahan yang Anda coba visualisasikan, seperti cabang-cabangnya sekarang telah menyimpang.

*-----*Dev-------*Feature

Melawan

       /----*DevB
*-----*DevA
       \----*FeatureC
Pemberontak tanpa gigi
sumber
9

Git 2.23 memperkenalkan git switchdan git restoremembagi tanggung jawabgit checkout

Membuat cabang baru dari cabang yang sudah ada pada git 2.23:

git switch -c my-new-branch

Beralih ke cabang baru 'cabang-baru-saya'

  • -c adalah kependekan dari --create dan menggantikan checkout git yang terkenal -b

Lihatlah posting blog Github ini menjelaskan perubahan secara lebih rinci:

Git 2.23 membawa pasangan baru perintah eksperimental ke paket yang sudah ada: git switch dan git restore . Keduanya dimaksudkan untuk akhirnya menyediakan antarmuka yang lebih baik untuk checkout git yang terkenal. Perintah baru berniat untuk masing-masing memiliki pemisahan yang jelas, dengan rapi membagi apa yang menjadi tanggung jawab git checkout

JSON C11
sumber
9

Untuk membuat cabang dari cabang lain di direktori lokal Anda, Anda dapat menggunakan perintah berikut.

git checkout -b <sub-branch> branch

Sebagai contoh:

  • nama cabang baru yang akan dibuat 'XYZ'
  • nama cabang ABC di mana XYZ harus dibuat
git checkout -b XYZ ABC
Sumit Ghewade
sumber
3

Jika Anda ingin membuat cabang dari cabang lain, ikuti langkah-langkah di bawah ini:

Asumsi :

  1. Anda saat ini di cabang utama.
  2. Anda tidak memiliki perubahan untuk dikomit. (Jika Anda memiliki perubahan untuk dilakukan, sembunyikan!).
  3. BranchExistingadalah nama cabang tempat Anda perlu membuat cabang baru dengan nama BranchMyNew.

Langkah-langkah :

  1. Ambil cabang ke mesin lokal Anda.

    $ git fetch origin BranchExisting : BranchExisting
    

Perintah ini akan membuat cabang baru di lokal Anda dengan nama cabang yang sama.

  1. Sekarang, dari checkout cabang utama ke cabang yang baru diambil

    $ git checkout BranchExisting
    
  2. Anda sekarang berada di BranchExisting. Sekarang buat cabang baru dari cabang yang ada ini.

    $ git checkout -b BranchMyNew
    

Ini dia!

Darshit
sumber
1

Untuk membuat cabang dari yang lain dapat menggunakan sintaks ini juga:

git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>

Ini sedikit lebih pendek dari "git checkout -b" + "git push origin"

Alexander Samoylov
sumber