Feature branch uygulamaya yeni özellikler kazandırmak, mevcut olan özellikleri kaldırmak veya hatalı çalışanları düzeltmek için kullanılılar. Bu yapılanlar daha sonradan bir sonraki release ile yayınlanırlar. Feature branch sadece develop ile birleştirildiği için, yerel ve uzak master branch her zaman geri kalır.



Feature branch ile çalışırken, diğer takım üyelerininde yapılan işi gözden geçirebilmeleri için, GitHub içinde "pull request" oluşturulur. Bu işin aslıda budur!


Hazırlık


Yerel branchların eski olma olasılığı yüksek olduğu için, çalışmaya başlamadan önce bu adımların atılması mecburidir.


Adım 1


Aktif branch olarak develop'u seçin.


$ git branch
* develop
master

Adım 2


Tüm yenilikleri alın.


$ git remote update
Fetching origin

Adım 3


Yerel develop branchı yenileyin.


$ git pull origin develop
From github.com:inanzzz/manual
* branch develop -> FETCH_HEAD
Already up-to-date.

Feature branch yaratma


Adım 1


Ana olarak origin/develop branchı takip edecek şekilde yarat.


$ git checkout -b feature/hello-world origin/develop
Branch feature/hello-world set up to track remote branch develop from origin.
Switched to a new branch 'feature/hello-world'

$ git branch
develop
* feature/hello-world
master

Adım 2


Varsayalım ki bir takım işler yapıp commit ile işlemi sonlandırdınız.


$ echo 'feature/hello-world' > one.txt
$ git add --all
$ git commit -m 'Feature hello-world commit'
[feature/hello-world 47645b3] Feature hello-world commit
1 file changed, 1 insertion(+)
create mode 100644 one.txt


Adım 3


Bir "pull request" yaratmak için yayınlayın.


$ git push origin feature/hello-world
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 313 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:inanzzz/manual.git
* [new branch] feature/hello-world -> feature/hello-world

Adım 4


GitHub'a gittiğinizde, yayıladığınız feature branch için bir tane "pull request" açmanızı isteyen ibare göreceksiniz. Açmak işlemi sırasında, karşılaştırılacak olan branchı develop olarak seçin ve daha sonra başlık ve açıklamayı yazarak işlemi sonlandırın.




Adım 5


Bu aşamada diğer takım üyeleri yapılan işi gözden geçirmek için "pull request" ile ilgilenirler. Eğer herkes yaptığınız işten memnun ise, "Merge pull request" buton ile "pull request" develop ile birleştirilir ve "Delete pull request" butonu ile silinir. Eğer aksi bir durum söz konusu olursa, gerekli düzeltmeleri yapmak zorunda kalırsınız. Varsayalım ki herşey yolunda gitti ve de işlemi sonlandırdınız ama bu sadece GitHub üzerinde gerçekleşti. Bir sonraki yapmamız gereken, yerel develop branchı yenilemek olacak.


Adım 6


Aktif branch olarak develop'u seçin.


$ git checkout develop
Switched to branch 'develop'
Your branch is up-to-date with 'origin/develop'.

$ git branch
* develop
feature/hello-world
master

Adım 7


GitHub'ta yaptığınız gibi feature branchı silin.


$ git branch -D feature/hello-world
Deleted branch feature/hello-world (was 47645b3).

$ git branch
* develop
master

Adım 8


Doğrulamak amacıyla bakarsak, aşağıda da gördüğümüz gibi yerel develop branch henüz yeniliklere sahip değil. Yukarıda da belirttiğimiz gibi, birleştirme işlemi sadece GitHub içinde gerçekleşti.


$ git branch -avv
* develop e0d2b2e [origin/develop] Very first commit
master e0d2b2e [origin/master] Very first commit
remotes/origin/develop e0d2b2e Very first commit
remotes/origin/feature/hello-world 0dacd74 Feature hello-world commit
remotes/origin/master e0d2b2e Very first commit


Adım 9


Tüm yenilikleri alın.


$ git remote update
Fetching origin
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), done.
From github.com:inanzzz/manual
e0d2b2e..b326329 develop -> origin/develop

Adım 10


Yerel develop branchı yenileyin.


$ git pull origin develop
From github.com:inanzzz/manual
* branch develop -> FETCH_HEAD
Updating e0d2b2e..b326329
Fast-forward
one.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 one.txt

Doğrulamak amacıyla bakarsak, aşağıda da gördüğümüz gibi yerel develop branch artık tüm yeniliklere sahip.


$ git branch -avv
* develop b326329 [origin/develop] Merge pull request #1 from inanzzz/feature/hello-world
master e0d2b2e [origin/master] Very first commit
remotes/origin/develop b326329 Merge pull request #1 from inanzzz/feature/hello-world
remotes/origin/feature/hello-world 0dacd74 Feature hello-world commit
remotes/origin/master e0d2b2e Very first commit


Özet


Yukarıda yapılanların kısa özetine bakalım.


# 1. Checked out into develop branch
git checkout develop

# 2. Fetched all remote updates
git remote update

# 3. Update local develop branch with remote copy
git pull origin develop

# 4. Created a feature branch that tracks origin/develop
git checkout -b feature/hello-world origin/develop

# 5. Did some dummy work
echo 'feature/hello-world' > one.txt
git add --all
git commit -m 'Feature hello-world commit'

# 6. Pushed feature branch to remote repository
git push origin feature/hello-world

# 7. Opened a "pull request" in GitHub for "peer review"

# 8. Merged and deleted feature branch in GitHub

# 9. Checked out into develop branch
git checkout develop

# 10. Delete local feature branch
git branch -D feature/hello-world

# 11. Fetched all remote updates
git remote update

# 12. Update local develop branch wit remote copy
git pull origin develop