Git - Şubeleri Yönetme

Dal işlemi, başka bir geliştirme hattı oluşturmaya izin verir. Bu işlemi geliştirme sürecini iki farklı yöne ayırmak için kullanabiliriz. Örneğin, 6.0 sürümü için bir ürün çıkardık ve 7.0 özelliklerinin geliştirilmesini 6.0 hata düzeltmelerinden ayrı tutmak için bir şube oluşturmak isteyebiliriz.

Şube Oluştur

Tom, git branch <şube adı> komutunu kullanarak yeni bir dal oluşturur. Mevcut bir şubeden yeni bir şube oluşturabiliriz. Başlangıç ​​noktası olarak belirli bir commit veya tag kullanabiliriz. Herhangi bir belirli kesinleştirme kimliği sağlanmadıysa, dal, başlangıç ​​noktası olarak HEAD ile oluşturulur.

[jerry@CentOS src]$ git branch new_branch

[jerry@CentOS src]$ git branch
* master
new_branch

Yeni bir şube oluşturulur; Tom, mevcut dalları listelemek için git branch komutunu kullandı. Git şu anda dalın teslim alınmasından önce bir yıldız işareti gösterir.

Dal oluşturma işleminin resimli temsili aşağıda gösterilmiştir -

Şubeler arasında geçiş yap

Jerry, dallar arasında geçiş yapmak için git checkout komutunu kullanır.

[jerry@CentOS src]$ git checkout new_branch
Switched to branch 'new_branch'
[jerry@CentOS src]$ git branch
master
* new_branch

Dal Oluşturma ve Değiştirme Kısayolu

Yukarıdaki örnekte, dalları oluşturmak ve değiştirmek için sırasıyla iki komut kullandık. Git sağlar–bcheckout komutu ile seçenek; bu işlem yeni bir şube oluşturur ve hemen yeni şubeye geçer.

[jerry@CentOS src]$ git checkout -b test_branch
Switched to a new branch 'test_branch'

[jerry@CentOS src]$ git branch
master
new_branch
* test_branch

Bir Şubeyi Silme

Git branch komutu ile –D seçeneği sağlanarak bir dal silinebilir. Ancak mevcut şubeyi silmeden önce diğer şubeye geçin.

Jerry şu anda açık test_branchve o dalı kaldırmak istiyor. Böylelikle dalı değiştirir ve aşağıda gösterildiği gibi şubeyi siler.

[jerry@CentOS src]$ git branch
master
new_branch
* test_branch

[jerry@CentOS src]$ git checkout master
Switched to branch 'master'

[jerry@CentOS src]$ git branch -D test_branch
Deleted branch test_branch (was 5776472).

Şimdi Git yalnızca iki dal gösterecek.

[jerry@CentOS src]$ git branch
* master
new_branch

Şubeyi Yeniden Adlandırma

Jerry, dizgi operasyonları projesine geniş karakterler için destek eklemeye karar verir. Zaten yeni bir şube oluşturdu, ancak şube adı uygun değil. Böylece şube adını kullanarak değiştirir–m seçenek ve ardından old branch name ve new branch name.

[jerry@CentOS src]$ git branch
* master
new_branch

[jerry@CentOS src]$ git branch -m new_branch wchar_support

Şimdi git branch komutu yeni dal adını gösterecek.

[jerry@CentOS src]$ git branch
* master
wchar_support

İki Şubeyi Birleştir

Jerry, geniş karakterli dizgenin dizge uzunluğunu döndürmek için bir işlev uygular. Yeni kod aşağıdaki gibi görünecektir -

[jerry@CentOS src]$ git branch
master
* wchar_support

[jerry@CentOS src]$ pwd
/home/jerry/jerry_repo/project/src

[jerry@CentOS src]$ git diff

Yukarıdaki komut aşağıdaki sonucu verir -

t a/src/string_operations.c b/src/string_operations.c
index 8ab7f42..8fb4b00 100644
--- a/src/string_operations.c
+++ b/src/string_operations.c
@@ -1,4 +1,14 @@
#include <stdio.h>
+#include <wchar.h>
+
+size_t w_strlen(const wchar_t *s)
+
{
   +
   const wchar_t *p = s;
   +
   +
   while (*p)
   + ++p;
   + return (p - s);
   +
}

Test ettikten sonra, değişikliklerini yeni şubeye koyar ve iter.

[jerry@CentOS src]$ git status -s
M string_operations.c
?? string_operations

[jerry@CentOS src]$ git add string_operations.c

[jerry@CentOS src]$ git commit -m 'Added w_strlen function to return string lenght of wchar_t
string'

[wchar_support 64192f9] Added w_strlen function to return string lenght of wchar_t string
1 files changed, 10 insertions(+), 0 deletions(-)

Jerry'nin bu değişiklikleri yeni şubeye zorladığını ve bu nedenle şube adını kullandığını unutmayın. wchar_support onun yerine master şube.

[jerry@CentOS src]$ git push origin wchar_support  <−−− Observer branch_name

Yukarıdaki komut aşağıdaki sonucu verecektir.

Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 507 bytes, done.
Total 4 (delta 1), reused 0 (delta 0)
To [email protected]:project.git
* [new branch]
wchar_support -> wchar_support

Değişiklikleri gerçekleştirdikten sonra, yeni şube aşağıdaki gibi görünecektir -

Tom, Jerry'nin özel şubesinde ne yaptığını merak ediyor ve günlükleri kontrol ediyor. wchar_support şube.

[tom@CentOS src]$ pwd
/home/tom/top_repo/project/src

[tom@CentOS src]$ git log origin/wchar_support -2

Yukarıdaki komut aşağıdaki sonucu verecektir.

commit 64192f91d7cc2bcdf3bf946dd33ece63b74184a3
Author: Jerry Mouse <[email protected]>
Date: Wed Sep 11 16:10:06 2013 +0530

Added w_strlen function to return string lenght of wchar_t string


commit 577647211ed44fe2ae479427a0668a4f12ed71a1
Author: Tom Cat <[email protected]>
Date: Wed Sep 11 10:21:20 2013 +0530

Removed executable binary

Tom, commit mesajlarını görüntüleyerek, Jerry'nin geniş karakter için strlen işlevini uyguladığını ve ana dalda aynı işlevselliği istediğini fark eder. Yeniden uygulamak yerine, şubesini ana şube ile birleştirerek Jerry'nin kodunu almaya karar verir.

[tom@CentOS project]$ git branch
* master

[tom@CentOS project]$ pwd
/home/tom/top_repo/project

[tom@CentOS project]$ git merge origin/wchar_support
Updating 5776472..64192f9
Fast-forward
src/string_operations.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)

Birleştirme işleminden sonra ana dal aşağıdaki gibi görünecektir -

Şimdi şube wchar_supportana şube ile birleştirildi. Commit mesajını görüntüleyerek veya string_operation.c dosyasında yapılan değişiklikleri görüntüleyerek bunu doğrulayabiliriz.

[tom@CentOS project]$ cd src/

[tom@CentOS src]$ git log -1

commit 64192f91d7cc2bcdf3bf946dd33ece63b74184a3
Author: Jerry Mouse 
      
        Date: Wed Sep 11 16:10:06 2013 +0530 Added w_strlen function to return string lenght of wchar_t string [tom@CentOS src]$ head -12 string_operations.c 
      

Yukarıdaki komut aşağıdaki sonucu verecektir.

#include <stdio.h>
#include <wchar.h>
size_t w_strlen(const wchar_t *s)
{
   const wchar_t *p = s;

   while (*p)
      ++p;

   return (p - s);
}

Test ettikten sonra, kod değişikliklerini ana şubeye iter.

[tom@CentOS src]$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To [email protected]:project.git
5776472..64192f9 master −> master

Rebase Şubeleri

Git yeniden taban komutu bir dal birleştirme komutudur, ancak fark, işlemlerin sırasını değiştirmesidir.

Git birleştirme komutu, diğer dallardan gelen işlemleri geçerli yerel dalın HEAD'inin üstüne koymaya çalışır. Örneğin, yerel şubeniz A−> B−> C−> D'yi taahhüt eder ve birleştirme dalı A−> B−> X−> Y'yi tamamlar, sonra git merge mevcut yerel şubeyi A−> gibi bir şeye dönüştürür. B−> C−> D−> X−> Y

Git yeniden taban komutu, geçerli yerel dal ile birleştirme dalı arasındaki ortak atayı bulmaya çalışır. Daha sonra, geçerli yerel şubedeki işlemlerin sırasını değiştirerek taahhütleri yerel şubeye gönderir. Örneğin, yerel şubeniz A−> B−> C−> D'yi tamamlamışsa ve birleştirme dalı A−> B−> X−> Y'yi tamamlamışsa, Git yeniden temeli mevcut yerel dalı A− gibi bir şeye dönüştürecektir. > B−> X−> Y−> C−> D.

Birden çok geliştirici tek bir uzak depoda çalıştığında, uzak depodaki işlemlerin sırasını değiştiremezsiniz. Bu durumda, yerel taahhütlerinizi uzak depo kayıtlarının üstüne koymak için yeniden temelleme işlemini kullanabilir ve bu değişiklikleri itebilirsiniz.