22 Ağustos 2019 Perşembe

git rebase seçeneği

Giriş
Söz dizimi şöyle
git rebase <branch>
Açıklaması şöyle
rebase your current HEAD onto the specified branch
1. rebase ve merge seçenekleri yerel depodaki branch'leri birleştirmek için kullanılır. Eğer öncesinde git fetch komutunu çalıştırırsak uzak depo ile senkronize olacağımız için pratikte git pull --rebase çalıştırmış gibi oluruz.

2. merge seçeneği ile benzerdir ancak dallanma ile alakalı kayıt kalmaz. rebase başlangıç noktasını değiştirir. Açıklaması şöyle.
The first thing to understand about git rebase is that it solves the same problem as git merge. Both of these commands are designed to integrate changes from one branch into another branch—they just do it in very different ways.
Ne Faydası Var
Açıklaması şöyle
To avoid merge commit, we use rebasing. With rebasing we re-write the history. Rebase puts the entire feature branch on tip of master.
Git pull kullanıyorsak commit sırasını şöyle görürüz. Kendi yaptığımız değişiklikler yani f1 ve f2 push'landıktan sonra merge commit olarak m4 ve m5 yapılır
m1 -> m2 -> m2 -> f1 -> f2 -> m4 -> m5 -> merged with master
Git rebase kullanıyorsak commit sırasını şöyle görürüz. Bizden önce yapılan değişikliklerden sonra kendi yaptığımız değişiklikler yani f1 ve f2 push'lanır.
m1 -> m2 -> m2 -> m4 -> m5 -> f1 -> f2
Şeklen şöyle


Örnek
Elimizde şöyle iki branch bir olsun
A--B--C------F--G  (master)
       \    
        D--E  (feature)
rebase ile şöyle olur. Yani branch'in başlangıç noktası değişir.
A--B--C------F--G  (master)
                 \
                  D'--E'  (feature)
Force Push
rebase edilen branch tekrar uzak depo'ya pushlanırken bazen hata alınır. Bu yüzden
git push --force komutu kullanılır. Açıklaması şöyle
So if you already pushed your commits to the remote repository, you will need to use –force after rebasing because the commit hash is completely changed.

Diğer
IntelliJ Idea kullanırken "Update Project" yapınca seçince karşımıza 3 tane seçene çıkıyor.
1. Merge
2. Rebase
3. Branch Default

Kullanım
Örnek
Şöyle yaparız
# Go to the feature branch
git checkout feature

# Make a rebase to place the feature commits 
# to the last place in history
git rebase main

# Update origin branch
git checkout main
git merge --ff-only feature
git push origin main

# We can delete the feature branch safely
git branch -d feature
--abort seçeneği
Açıklaması şöyle
At any time, we can use the --abort parameter to abort the rebase action, and the branch will return to the state before the rebase started.
Örnek
Şöyle yaparız
git rebase -—abort
-i /--interactive seçeneği
Örnek
Şöyle yaparız.
git rebase -i
Örnek
En son N commit'i birleştirmek için şöyle yaparız.
git rebase -i HEAD~N 
vi penceresi açılır
> git rebase -i HEAD~4


s cacc52da add: qrcode
s f072ef48 update: indexeddb hack
s 4e84901a feat: add indexedDB floder
s 8f33126c feat: add test2.js

# Rebase 5f2452b2..8f33126c onto 5f2452b2 (4 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
-x/--exec seçeneği
Örnek
Şöyle yaparız. Her commit'te belirtilen uygulamayı çalıştırır.
git rebase --interactive --exec CodeFormatter.exe --root
Kısa hali için şöyle yaparız.
git rebase -i -x CodeFormatter.exe --root


Hiç yorum yok:

Yorum Gönder