Bir şubenin içeriğini yeni bir yerel şubeye nasıl kopyalayabilirim?


270

Yerel bir şubede çalıştım ve değişiklikleri uzaktan kumandayı zorladım. O daldaki değişiklikleri geri almak ve dalda başka bir şey yapmak istiyorum, ama işi tamamen kaybetmek istemiyorum. Yerel olarak yeni bir şube oluşturmak ve eski dalı oraya kopyalamak gibi bir şey düşünüyordum, o zaman değişiklikleri geri alabilir ve eski şube üzerinde çalışmaya devam edebilirim. Belki daha iyi bir yol var mı? Veya bunu nasıl yaparım?


10
4 yıl sonra Git 2.15 (4. Çeyrek 2017) ile sahip olacaksınız git branch -c A B. Aşağıdaki cevabımı
VonC

Yanıtlar:


445
git checkout old_branch
git branch new_branch

Bu size "old_branch" ile aynı durumdaki yeni bir şube "new_branch" verecektir.

Bu komut aşağıdakilerle birleştirilebilir:

git checkout -b new_branch old_branch

134
Veya daha da kısa git checkout -b new_branch(zaten açıkken old_branch).
Koraktor

4
Bu sadece yeni dalı oluşturur ancak içeriği bir şubeden başka bir şubeye kopyalayamaz. Ben bu komutları denemek o sadece "**** adlı şube zaten var" gösteriyor.
anoop

7
Biri böyle yeni bir dal yaratırsa, eski dalın bir kopyası yok, sadece eski dalın başında yeni bir işaretçi var. Ancak şimdi yeni şubeye yeniden basmak gibi bir şey yaptığınızda, yeni dal değiştirilirken eski dalın hala orijinal durumunda olduğunu görmelisiniz. Bence bu OP'nin istediği şeyi yapıyor.
uli_1973

1
git checkout old_branch ve git şubesi new_branch .... Üretimde yukarıdaki komutu kullanmak daha iyidir, aşağıdaki komut yeni dal oluşturacak ve sizi yeni şubeye götürecektir (dalı yeni dal olarak değiştirin) .... git check--b yeni_branch old_branch
Kiran

Bir dalın üzerine yazmak için bkz. Stackoverflow.com/questions/26961371/…
MCCCS

55
git branch copyOfMyBranch MyBranch

Bu, potansiyel olarak zaman alıcı ve gereksiz bir şubeyi kontrol etme eylemini önler. Bir kasanın "çalışma ağacını" değiştirdiğini hatırlayın; bu, büyükse veya büyük dosyalar (örneğin resimler veya videolar) içeriyorsa uzun sürebilir.


1
Tabii ki, git'te ikili dosyalarınız varsa, özellikle de büyük olanlar, söz konusu dosyalar için stratejinizi analiz etmeye değer. Doğal olarak, olağandışı durumlar olacak ve git'te ikili dosyaların bulunması mükemmel kabul edilebilir.
Rahip

52

Git 2.15 (4. Çeyrek 2017) ile mevcut bir şubeyi kopyalayarak yeni bir dal oluşturmayı git branch"öğrendim" -c/-C.

Bakınız Ævar Arnfjörð Bjarmason ( ) tarafından c8b2cec (18 Haz 2017 ) . Bkz. Taahhüt 52d59cc , taahhüt 5463caa (18 Haz 2017) Sahil Dua ( ) . (Tarafından Birleştirilmiş - Junio C Hamano - içinde 3b48045 taahhüt 2017, 03 Eki)avar
sahildua2305
gitster

branch: Bir ekleme --copy( -cgitmek) seçeneğini --move( -m)

--copyBir şubeye ve onun reflog ve yapılandırmasına yetenek eklediğinizde , reflog ve yapılandırma taşınmak yerine kopyalanması dışında --move( -m) seçeneğiyle aynı temel makineleri kullanır .

Bu örneğin yeni sürümü için bir konu dalı kopyalama örneğin yararlıdır workiçin work-2gönderdikten sonra workfarklı şube ile gider tüm izleme bilgileri ve diğer konfigürasyon koruyarak ve süre listesine Konu --moveetrafında diğer şimdiden gönderilen dalı tutmak referans.

Not: bir dalı kopyalarken, geçerli dalınızda kalırsınız.
Junio ​​C Hamano'nun açıkladığı gibi:

Geçerli dal Bolan dalını kopyalayarak yeni bir dal oluştururken, yeni dalın üzerine Agelecek şekilde güncelleştirilir HEAD.
Muhtemelen bu şekilde yapıldı çünkü " git branch -c A B" uygulaması "üzerinde piggyback yaptı git branch -m A B,

Bu olağan beklentilerle uyuşmuyor.
Eğer mavi bir sandalyede oturuyor olsaydım ve biri gelir ve onu kırmızıya boyarsa, şimdi kırmızı olan bir sandalyede oturmayı kabul ederdim (bunun yerine artık en sevdiğim mavi sandalyem olmadığı için durmak için de sorun yok ).

Ama eğer birisi oturduğum mavi sandalyeden sonra modellenen yeni bir kırmızı sandalye yaratırsa, mavi sandalyeden önyüklenmeyi ve yeni kırmızı sandalyede oturmayı beklemiyorum.

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.