Yeni bir şubeye değişiklik yapma


151

Sadece bir dalda değişiklikler yaptım. Diğer şubedeki değişiklikleri nasıl yapabilirim?

Kullanmaya çalışıyorum:

git checkout "the commmit to the changed branch" -b "the other branch"

Ancak, bunun doğru bir şey olduğunu düşünmüyorum, çünkü bu durumda "diğer dalda" değişiklik yapmak yerine yeni bir dal oluşturuyorum.

Bunun yerine aşağıdaki komutu kullanmalı mıyım?

git merge "the other branch"

Sadece bir taahhüt veya birkaç?
Carl Norum

Yanıtlar:


269

git checkout -b your-new-branch

git add <files>

git commit -m <message>

İlk olarak, yeni şubenizi kontrol edin. Ardından, hazırlama işleminde kullanmak istediğiniz tüm dosyaları ekleyin. Son olarak, az önce eklediğiniz tüm dosyaları kaydedin. Daha git push origin your-new-branchsonra, değişikliklerinizin uzaktan kumandada görünmesini isteyebilirsiniz .


1
yeni şubeyi git checkout v3.0'dan (değişiklik yapmadan önceki dal) yeni dal aldığım için, hala "git add <files>" kullanmam gerekiyor mu?
user1988385

Şu git statusanda neyin hazırlandığını ve neyin olmadığını görmek için a yapabilirsiniz .
John Brodie

5
Neden hem git addve git commit -a?
Carl Norum

11
Bunun git checkout -b your-new-branchyerine değil git checkout your-new-branchmi?
Schrodinger's'Cat

1
zaten bir dosyayı izlediysem ve yeni bir şubeye geçmek istersem bu dosyaları yeni oluşturulan şubeye eklerim?
ass-king bazı soru

58

Değişiklik yapmadıysanız

Yaptığınız değişiklikler diğer şubeyle uyumluysa

Bu sorudan kaynaklanmaktadır, çünkü OP yeni bir dal taahhüt etmek ister ve ayrıca değişikliklerinizin üzerine yazmayı tetiklemeden hedef dal ile uyumlu olması durumunda da geçerlidir.

John Brodie tarafından kabul edilen cevapta olduğu gibi, yeni şubeyi kontrol edebilir ve işi yapabilirsiniz:

git checkout -b branch_name
git add <files>
git commit -m "message"

Yaptığınız değişiklikler diğer şubeyle uyumlu değilse

Hatayı alırsanız:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

Ardından çalışmanızı saklayabilir, yeni bir şube oluşturabilir, daha sonra saklanan değişikliklerinizi patlatabilir ve çakışmaları çözebilirsiniz:

git stash
git checkout -b branch_name
git stash pop

Yeni dalı oluşturduktan sonra bu değişiklikleri yapmış gibi olacaksınız. O zaman her zamanki gibi taahhüt edebilirsiniz:

git add <files>
git commit -m "message"

Değişiklik yaptınız

Taahhütleri orijinal şubede tutmak istiyorsanız

Bu durumda doğru araç olan kiraz toplama ile Carl Norum'un cevabına bakın:

git checkout <target name>
git cherry-pick <original branch>

Taahhütleri orijinal şubede tutmak istemiyorsanız

Bu potansiyel kopya için joeytwiddle'ın cevabına bakınız . Yukarıdaki adımlardan herhangi birini uygun şekilde uygulayın, ardından orijinal dalı geri alın:

git branch -f <original branch> <earlier commit id>

Değişikliklerinizi GitHub gibi paylaşılan bir uzaktan kumandaya ittiyseniz, ne yaptığınızı bilmiyorsanız bu geri almayı denememelisiniz.


3
Herkes bu kodu denemeliydi. Cevap arayanların çoğu, mevcut kodunuzda zaten bazı değişiklikler var.
Sushin Pv

2
Neden stash ve stash pop'u eklediniz? Yeni bir şubeye ödeme yaptığınızda, değişikliklerinizi eklemek ve saklamak için kullanabilirsiniz, saklamanıza gerek yoktur.
Tristan

@Tristan Değişikliklerin uyumlu olduğu ve dosyaların üzerine yazılmadığı durumda haklısınız. Aksi takdirde, error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.yeni bir cevap yazmak veya cevabımı düzenlemek ister misiniz? Değilse, kendim düzenleyebilirim.
miguelmorin

Tamam, haklısın. Sanırım cevabınızı kabul edilen cevaba ek olarak ne getirdiğini göstermek için tamamlamanız gerektiğini düşünüyorum.
Tristan

@Tristan bunu yaptım. OP yeni bir şube soruyordu, bu durumda kabul edilen cevap doğru cevaptır. Diğer insanlar cevabımı yararlı bulduğunda benimkini koruyorum. Uzun bir cevap oldu ve herhangi bir geri bildirim ile düzenlemekten mutluluk duyuyorum.
miguelmorin

24

Doğru anlarsam changed_branch, taahhütte other_branchbulundun ve bu taahhüdü kopyalamak istiyor musun? Kolay:

git checkout other_branch
git cherry-pick changed_branch

5
Bu, başarmaya çalıştığı şey için doğru cevaptır.
Sean
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.