Git ┼čubesini ustal─▒kla birle┼čtirmek i├žin en iyi (ve en g├╝venli) yol nedir?


Al─▒nan cevaba git


Dan yeni bir ┼čube master olu┼čturulur, biz diyoruz test .

Ya master ba┼čka ┼čubeler taahh├╝t eden ya da yaratan ve sonra bir araya gelen birka├ž geli┼čtirici var master .

Diyelim ki ├╝zerinde ├žal─▒┼čman─▒n test birka├ž g├╝n test s├╝rd├╝─č├╝n├╝ ve i├žerideki taahh├╝tlerle s├╝rekli g├╝ncel kalmak istedi─činizi varsayal─▒m master .

Ben yapaca─č─▒n─▒ git pull origin master dan test .

Soru 1: Bu do─čru yakla┼č─▒m m─▒? Btw ile ├žal─▒┼čt─▒─č─▒m gibi di─čer geli┼čtiriciler de ayn─▒ dosyalar ├╝zerinde kolayca ├žal─▒┼čabilirdi.


─░┼čim test bitti ve onu tekrar birle┼čtirmeye haz─▒r─▒m master . ─░┼čte d├╝┼č├╝nebilece─čim iki yol:

A:

 git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test 
 

B:

 git checkout test
git pull origin master
git checkout master
git merge test
 

Ben kullanm─▒yorum --rebase de bana g├Âre Rebase gelen de─či┼čiklikleri alacak ├ž├╝nk├╝ master ve ba┼čkalar─▒n─▒n yap─▒lan de─či┼čikliklerin ├╝zerine olabilir dolay─▒s─▒yla bunun ├╝zerine may─▒n y─▒─č─▒n─▒.

Soru 2: Bu iki y├Ântemden hangisi do─črudur? Buradaki fark nedir?

T├╝m bunlar─▒n amac─▒ test , ┼čubemdeki olaylarla ilgili bilgileri g├╝ncel tutmak master ve daha sonra master zaman ├žizelgesini m├╝mk├╝n oldu─ču kadar do─črusal tutmay─▒ umarak onlar─▒ birle┼čtirebilirim .


1945





2011-04-09




Cevap say─▒s─▒n─▒ say: 8






Bunu nas─▒l yapard─▒m

 git checkout master
git pull origin master
git merge test
git push origin master
 

Uzak bir b├Âlgeden yerel bir ┼čubem varsa, di─čer ┼čubeleri bu uzaktan kumanda ile birle┼čtirmek konusunda rahat hissetmiyorum. Ayr─▒ca de─či┼čiklik yapmak istemeyece─čim, ne yapmak istedi─čimden memnun kalana kadar ve ben de sadece benim ve yerel depolar─▒m i├žin olan ┼čeyleri hi├ž zorlamad─▒m. A├ž─▒klaman─▒za g├Âre, bu test sadece sizin i├žin mi? Yani yay─▒nlamak i├žin hi├žbir sebep yok.

git her zaman kendinize ve di─čer de─či┼čikliklere sayg─▒ duymaya ├žal─▒┼č─▒r, ├Âyle olacakt─▒r --rebase . Uygun ┼čekilde a├ž─▒klayabilece─čimi sanm─▒yorum, bu y├╝zden Git kitab─▒na bir g├Âz at─▒n - Rebasing veya git-ready: K├╝├ž├╝k bir a├ž─▒klama i├žin rebasing'e giri┼č yap─▒n . Olduk├ža haval─▒ bir ├Âzellik


2792







Bu ├žok pratik bir sorudur, ancak yukar─▒daki t├╝m cevaplar pratik de─čildir.

Sevmek

 git checkout master
git pull origin master
git merge test
git push origin master
 

Bu yakla┼č─▒m─▒n iki sorunu var :

  1. G├╝venli de─čil, ├ž├╝nk├╝ test dal─▒ ile ana dal aras─▒nda herhangi bir ├žak─▒┼čma olup olmad─▒─č─▒n─▒ bilmiyoruz.

  2. T├╝m test taahh├╝tlerini ÔÇťustal─▒k gerektiren bir birle┼čmeÔÇŁ halinde ÔÇťs─▒kmakÔÇŁ olacakt─▒r; yani ana dalda, test dal─▒n─▒n t├╝m de─či┼čiklik kay─▒tlar─▒n─▒ g├Âremiyoruz.

Dolay─▒s─▒yla, baz─▒ ├žat─▒┼čmalar olaca─č─▒ndan ┼č├╝phelendi─čimizde, git i┼člemlerini ger├žekle┼čtirebiliriz:

 git checkout test
git pull 
git checkout master
git pull
git merge --no-ff --no-commit test
 

merge ├ľnce test et commit , h─▒zl─▒ ileri sar─▒lmaktan ka├ž─▒n─▒n --no-ff ,

E─čer ├žat─▒┼čma ile kar┼č─▒la┼č─▒l─▒rsa, git status ├žat─▒┼čmalarla ilgili detaylar─▒ kontrol etmeye ve ├ž├Âzmeye ├žal─▒┼čabiliriz.

 git status
 

├çat─▒┼čmalar─▒ ├ž├Âzd├╝kten sonra, ya da herhangi bir ├žat─▒┼čma yoksa, biz commit ve push onlar

 git commit -m 'merge test branch'
git push
 

Ancak bu ┼čekilde test dal─▒na giri┼č yapm─▒┼č olan de─či┼čiklik ge├žmi┼či kaybolacak ve ana dal─▒n di─čer geli┼čtiricilerin proje tarihini anlamalar─▒n─▒ zorla┼čt─▒racak.

Dolay─▒s─▒yla en iyi y├Ântem rebase yerine kullanmak zorunday─▒z merge (varsayal─▒m ki, bu s─▒rada dal ├žat─▒┼čmalar─▒n─▒ ├ž├Âzd├╝k).

A┼ča─č─▒da basit bir ├Ârnek verilmi┼čtir, geli┼čmi┼č i┼člemler i├žin l├╝tfen http://git-scm.com/book/tr/v2/Git-Branching-Rebasing adresine bak─▒n.http://git-scm.com/book/en/v2/Git-Branching-Rebasing

 git checkout master
git pull
git checkout test
git pull
git rebase -i master
git checkout master
git merge test
 

Evet, i┼činiz bitti─činde, t├╝m Test ┼čubelerinin taahh├╝tleri Master ┼čubesinin ba┼č─▒na ta┼č─▒nacakt─▒r. Yeniden bi├žimlendirmenin en b├╝y├╝k yarar─▒, do─črusal ve daha temiz bir proje ge├žmi┼či elde etmektir.

Ka├ž─▒n─▒lmas─▒ gereken tek ┼čey ┼čudur: Asla rebase ana dal gibi halka a├ž─▒k yerlerde kullanmay─▒n .

Asla a┼ča─č─▒daki gibi i┼člemleri yapmay─▒n :

 git checkout master
git rebase -i test
 

Https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing i├žin detaylarhttps://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing

apandis:


357







Ne rebase ne de bir birle┼čtirme, kimsenin de─či┼čikliklerinin ├╝zerine yazmamal─▒d─▒r (bir ├žat─▒┼čmay─▒ ├ž├Âzerken bunu yapmay─▒ se├žmezseniz).

Geli┼čmekte olan ola─čan yakla┼č─▒m

 git checkout master
git pull
git checkout test
git log master.. # if you're curious
git merge origin/test # to update your local test from the fetch in the pull earlier
 

Efendiye d├Ân├╝┼čmeye haz─▒r oldu─čunuzda,

 git checkout master
git log ..test # if you're curious
git merge test
git push
 

Birle┼čmeden bir ┼čeyler koparmaktan endi┼če ediyorsan─▒z, sizin git merge --abort i├žin var m─▒.

Birle┼čtirme arac─▒ olarak itme ve sonra ├žekme kullan─▒m─▒ aptalcad─▒r. Ayr─▒ca testi neden k├Âkene zorlad─▒─č─▒n─▒zdan da emin de─čilim.


87







├ľnce birle┼čtirilecek dal─▒ m├╝mk├╝n oldu─čunca temiz hale getirirdim. Testlerinizi yap─▒n, durumun istedi─činiz gibi oldu─čundan emin olun. Yeni komisyonlar─▒ git squash ile temizleyin .

KingCrunches cevab─▒n─▒n yan─▒ s─▒ra , kullanman─▒z─▒ ├Âneririm

 git checkout master
git pull origin master
git merge --squash test
git commit
git push origin master
 

Di─čer bran┼čta ├žok fazla taahh├╝tte bulunmu┼č olabilirsiniz, ki bu sadece bir uzmanl─▒k dal─▒nda taahh├╝tte bulunmal─▒d─▒r. Teslim ge├žmi┼čini olabildi─čince temiz tutmak i├žin, t├╝m taahh├╝tlerinizi test dal─▒ndan ana bran┼čtaki tek bir tesise ezmek isteyebilirsiniz (ayr─▒ca bkz. Git: Ezmek veya ezmemek i├žin? ). Daha sonra taahh├╝t mesaj─▒n─▒ ├žok anlaml─▒ bir ┼čeye yeniden yazabilirsiniz. Koda girmeden, okunmas─▒ ve anla┼č─▒lmas─▒ kolay bir ┼čey.

d├╝zenleme: ilginizi ├žekebilir

Bu y├╝zden GitHub'da bir ├Âzellik dal─▒ i├žin a┼ča─č─▒dakileri yap─▒yorum mybranch :

Ba┼člang─▒├ž ÔÇőÔÇőnoktas─▒ndan en son haberleri al─▒n

 $ git checkout master
$ git pull origin master
 

Birle┼čtirme temel karmas─▒n─▒ bulun:

 $ git merge-base mybranch master
c193ea5e11f5699ae1f58b5b7029d1097395196f

$ git checkout mybranch
$ git rebase -i c193ea5e11f5699ae1f58b5b7029d1097395196f
 

┼×imdi sadece ilki oldu─čundan emin olun pick , gerisi s :

 pick 00f1e76 Add first draft of the Pflichtenheft
s d1c84b6 Update to two class problem
s 7486cd8 Explain steps better
 

Sonra ├žok iyi bir taahh├╝t mesaj─▒ se├žin ve GitHub'a bas─▒n. ├çekme iste─čini o zaman yap.

├çekme iste─činin birle┼čtirilmesinden sonra bunu yerel olarak silebilirsiniz:

 $ git branch -d mybranch
 

ve GitHub'ta

 $ git push origin :mybranch
 

39







Bu, i┼č yerimde ekiple birlikte kulland─▒─č─▒m i┼č ak─▒┼č─▒. Senaryo tarif etti─činiz gibi. Birincisi, ├╝zerinde ├žal─▒┼čmay─▒ bitirdi─čimde test , test dal ├╝zerinde ├žal─▒┼čt─▒─č─▒m s├╝re boyunca master'a eklenenleri almak i├žin master ile yeniden derlerim.

git pull -r upstream master

Bu, test dal─▒ ├žatallad─▒─č─▒n─▒zdan ve uygulad─▒─č─▒n─▒zdan bu yana de─či┼čiklikleri master'a ├žeker ve ard─▒ndan ge├žerli master durumunun "├╝st├╝nde" test etmek i├žin yapt─▒─č─▒n─▒z de─či┼čiklikleri uygular. Di─čer insanlar testte d├╝zenledi─činiz dosyalarda de─či┼čiklik yapm─▒┼člarsa, burada ├žat─▒┼čmalar olabilir. Varsa, bunlar─▒ manuel olarak d├╝zeltmeniz ve taahh├╝t etmeniz gerekecektir. Bunu yapt─▒ktan sonra ana ┼čubeye ge├žmek ve test sorunsuz bir ┼čekilde bir araya gelmek iyi olacak .


6







Eski i┼č par├žac─▒─č─▒, ama yapma yolumu bulamad─▒m. Rebase ile ├žal─▒┼čan ve t├╝m taahh├╝tleri master ├╝st├╝ndeki bir ┼čubeden birle┼čtirmek isteyen biri i├žin de─čerli olabilir. Bir ┼čekilde bir ├žat─▒┼čma varsa, her i┼č i├žin bunlar─▒ ├ž├Âzebilirsiniz.

Master ve Branch'─▒ g├╝ncelleyin:

 git checkout master
git pull --rebase origin master
git checkout <branch_name>
git pull --rebase origin <branch_name>
 

Master'─▒n Birle┼čtirme ┼×ubesi:

 git checkout <branch_name>
git rebase master
 

Rebase s─▒ras─▒nda ├çat─▒┼čmalarla kar┼č─▒la┼č─▒rsan─▒z:

─░lk ├Ânce dosyadaki ├žak─▒┼čmay─▒ ├ž├Âz├╝n. Sonra:

 git add .
git rebase --continue
 

Rebase i┼člemi tamamland─▒─č─▒nda, ┼čubeyi master'─▒n ├╝st├╝ne rebase edin:

 git checkout master
git rebase <branch_name>
 

4







 git checkout master
git pull origin master
# Merge branch test into master
git merge test
 

Birle┼čtirme i┼čleminden sonra, e─čer dosya de─či┼čirse, o zaman birle┼čtirdi─činizde "├çak─▒┼čmay─▒ ├ç├Âz" hatas─▒ verilir.

├ľyleyse ├Ânce t├╝m ├žat─▒┼čmalar─▒n─▒ ├ž├Âzmelisin, sonra t├╝m de─či┼čikliklerini tekrar yapmal─▒s─▒n.

 git push origin master
 

Bu, test dal─▒nda de─či┼čiklik yapanlar─▒ daha iyi yapmakt─▒r, ├ž├╝nk├╝ hangi de─či┼čiklikleri yapt─▒─č─▒n─▒ biliyordu.


3







Rebase metodunu kullan─▒rd─▒m. ├ço─čunlukla, davan─▒z─▒ anlamsal olarak kusursuz bi├žimde yans─▒t─▒yor, yani. yapmak istedi─činiz ┼čey ┼ču anki ┼čubenizin durumunu yenilemek ve sanki en son temeli kullan─▒yormu┼č gibi ÔÇťtaklit etmekÔÇŁ.

Yani, kontrol bile etmeden master , ben:

 git fetch origin
git rebase -i origin/master
# ...solve possible conflicts here
 

Tabii ki, sadece k├Âk├╝nden almak, yerel bir halini yenilemez master (bir birle┼čme ger├žekle┼čtirmedi─či i├žin), ancak amac─▒m─▒z i├žin tamamen sorun de─čil - zamandan tasarruf etmek i├žin de─či┼čmeden kalmak istiyoruz.


3



─░lgili yay─▒nlar


D├╝z bir masadan a─čaca ayr─▒┼čt─▒rman─▒n en etkili / zarif yolu nedir?

Saniyeyi (Saat: Dakika: Saniye: Milisaniye) s├╝resine d├Ân├╝┼čt├╝rmenin en iyi yolu nedir?

Kendini usta olmaya zorlaman─▒n en iyi yolu nedir? [kapal─▒]

Bir dosyan─▒n tamam─▒n─▒ C++ 'ta std :: string i├žine okuman─▒n en iyi yolu nedir?

Microsoft Word belgesine kaynak kodu ├Ârnekleri eklemenin en iyi yolu nedir?

C'deki bir tamsay─▒daki en y├╝ksek ayarl─▒ bit'i (msb) bulman─▒n en h─▒zl─▒ / en etkili yolu nedir?

ABD dolar─▒ tutar─▒n─▒ temsil etmek i├žin kullan─▒lacak en iyi django model alan─▒ nedir?

Bir dizeyi Ruby'de belirli bir uzunlukta par├žalara kesmenin en iyi yolu nedir?

Javascript'teki kullan─▒c─▒ girdisinden bir Date nesnesine bir zaman ayr─▒┼čt─▒rman─▒n en iyi yolu nedir?

Homebrew'i yeniden kurman─▒n en iyi / en g├╝venli yolu nedir?

Etiketle ilgili di─čer sorular [git]


Bir NSMutableArray'i i├žinde ├Âzel nesnelerle nas─▒l s─▒ralar─▒m?

Bir projeyi Eclipse'e aktard─▒ktan sonra 'Bir ├ťst S─▒n─▒f Y├Ântemini Ge├žersiz K─▒lmal─▒s─▒n─▒z' Hatalar─▒

Xcode - 'NSUnknownKeyException' ifadesini nas─▒l d├╝zeltebilirim? Sebep:ÔÇŽ Bu s─▒n─▒f, X anahtar─▒n─▒n kod de─čeriyle uyumlu anahtar de─čeri de─čil midir?

Django ├Âl├žeklenir mi? [kapal─▒]

Java ÔÇť├çift Brace Ba┼člatmaÔÇŁ n─▒n Etkinli─či?

TINYTEXT, TEXT, MEDIUMTEXT ve LONGTEXT maksimum saklama boyutlar─▒

Maven g├╝ncellemesini zorla

"Pencere eklenemiyor - belirte├ž bo┼č de─čeri bir uygulama i├žin de─čil" ba─člam─▒nda atma ileti┼čim kutusu ba─člam─▒nda getApplication () ile

DataFrame'i bir CSV dosyas─▒na yazma

Bir hashmap'te bir anahtar verilen bir de─čer nas─▒l g├╝ncellenir?