İşte uzun cevap.
Uzak:
Git'i birlikte kullanıyorsanız, muhtemelen taahhütlerinizi diğer makinelerle veya konumlarla senkronize etmeniz gerekir. Git'in terminolojisinde her makineye veya konuma uzaktan kumanda denir ve her birinin bir veya daha fazla dalı olabilir. Çoğu zaman, sadece bir tanesine sahip olacaksınız origin
. Tüm uzaktan kumandaları listelemek için şunu çalıştırın git remote
:
$ git remote
bitbucket
origin
Bu uzak adların hangi konumlar için kısayol olduğunu, git remote -v
şunları çalıştırarak görebilirsiniz :
$ git remote -v
bitbucket git@bitbucket.org:flimm/example.git (fetch)
bitbucket git@bitbucket.org:flimm/example.git (push)
origin git@github.com:Flimm/example.git (fetch)
origin git@github.com:Flimm/example.git (push)
Her uzaktan kumandanın altında bir dizin vardır git/refs/remotes/
:
$ ls -F .git/refs/remotes/
bitbucket/ origin/
Makinenizdeki şubeler:
TLDR: yerel makinenizde üç tür şubeniz vardır: yerel izleme olmayan şubeler, yerel izleme şubeleri ve uzaktan izleme şubeleri. Uzak bir makinede, sadece bir tür dalınız var.
1. Yerel şubeler
Makinenizdeki tüm yerel şubelerin bir listesini çalıştırarak görüntüleyebilirsiniz git branch
:
$ git branch
master
new-feature
Her yerel şubenin altında bir dosya vardır .git/refs/heads/
:
$ ls -F .git/refs/heads/
master new-feature
Makinenizde iki tür yerel şube vardır: izlemeyen yerel şubeler ve yerel şubeleri izleme.
1.1 Takip etmeyen yerel şubeler
Takip etmeyen yerel şubeler başka herhangi bir şubeyle ilişkilendirilmez. Koşarak bir tane oluşturursunuz git branch <branchname>
.
1.2. Yerel şubeleri izleme
İzleme yerel şubeleri, genellikle bir uzaktan izleme şubesi olan başka bir şubeyle ilişkilendirilir. Koşarak bir tane oluşturursunuz git branch --track <branchname> [<start-point>]
.
Yerel şubelerinizden hangilerinin şubeleri takip ettiğini görebilirsiniz git branch -vv
:
$ git branch -vv
master b31f87c85 [origin/master] Example commit message
new-feature b760e04ed Another example commit message
Bu komutun çıktısından, yerel dalın master
uzaktan izleme dalını izlediğini origin/master
ve yerel dalın new-feature
hiçbir şey izlemediğini görebilirsiniz.
Hangi şubelerin şubeleri takip ettiğini görmenin bir başka yolu da bir göz atmaktır .git/config
.
Yerel şubeleri izlemek faydalıdır. Onlar çalışmasına izin git pull
ve git push
kullanma yukarı hangi dal belirtmeden,. Şube başka bir şubeyi izlemek üzere ayarlanmamışsa, bunun gibi bir hata alırsınız:
$ git checkout new-feature
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream new-feature <remote>/<branch>
2. Uzaktan izleme dalları (hala makinenizde)
Makinenizdeki tüm uzaktan izleme dallarının bir listesini çalıştırarak görüntüleyebilirsiniz git branch -r
:
$ git branch -r
bitbucket/master
origin/master
origin/new-branch
Her uzaktan izleme şubesinin altında bir dosya vardır .git/refs/<remote>/
:
$ tree -F .git/refs/remotes/
.git/refs/remotes/
├── bitbucket/
│ └── master
└── origin/
├── master
└── new-branch
Uzaktan izleme dallarınızı, uzak makinelerin içerdiği yerel önbellek olarak düşünün. Sen kullanarak uzaktan izleme dalları güncelleyebilir git fetch
, hangi git pull
perde arkasında kullanır.
Bir uzaktan izleme şubesine ait tüm veriler makinenizde yerel olarak (önbellek gibi) saklansa da, yine de yerel şube olarak adlandırılmaz. (En azından ben böyle demezdim!) Sadece uzaktan izleme dalı denir.
Uzak makinedeki şubeler:
Tüm uzak dalları (yani uzak makinedeki dalları) aşağıdakileri çalıştırarak görüntüleyebilirsiniz git remote show <remote>
:
$ git remote show origin
* remote origin
Fetch URL: git@github.com:Flimm/example.git
Push URL: git@github.com:Flimm/example.git
HEAD branch: master
Remote branches:
io-socket-ip new (next fetch will store in remotes/origin)
master tracked
new-branch tracked
Local ref configured for 'git pull':
master merges with remote master
new-branch merges with remote new-branch
Local ref configured for 'git push':
master pushes to master (up to date)
new-branch pushes to new-branch (fast-forwardable)
Bu git remote
komut, uzak makineyi ağları hakkında şubeleri hakkında sorgular. Yerel makinenizdeki uzaktan izleme dallarını güncellemez, bunun için git fetch
veya kullanın git pull
.
Çıktıdan, uzak makinede var olan tüm dalları "Uzak dallar" başlığına bakarak görebilirsiniz ("eski" olarak işaretlenmiş satırları yoksayın).
Uzak makinede oturum açabilir ve dosya sisteminde dosya bulabilirseniz, altındaki tüm dallara göz atabilirsiniz refs/heads/
.
Kopya kağıdı:
İzleme veya izleme dışı bir yerel şubeyi güvenle silmek için:
git branch -d <branchname>
İzleme veya izleme dışı bir yerel dalı silmek için zorla:
git branch -D <branchname>
Bir uzaktan izleme kolunu silmek için:
git branch -rd <remote>/<branchname>
Yeni bir yerel izleme dışı şube oluşturmak için:
git branch <branchname> [<start-point>]
Yeni bir yerel izleme dalı oluşturmak için: ( <start-point>
Belirtilirse ve şunun gibi bir uzaktan izleme dalıysa origin/foobar
, --track
bayrağın otomatik olarak dahil edildiğini unutmayın)
git branch --track <branchname> [<start-point]
Misal:
git branch --track hello-kitty origin/hello-kitty
Uzak makinedeki bir dalı silmek için:
git push --delete <remote> <branchname>
Eski olan, yani uzak makinedeki karşılık gelen dalların artık bulunmadığı tüm uzaktan izleme dallarını silmek için:
git remote prune <remote>
Bazı komutlarda kullandığınızı <remote>/<branch>
ve diğer komutları, fark etmiş olabilirsiniz <remote> <branch>
. Örnekler: git branch origin/hello-kitty
ve git push --delete origin hello-kitty
.
Keyfi gibi görünebilir, ancak eğik çizgi ne zaman ve ne zaman boşluk kullanılacağını hatırlamanın basit bir yolu vardır. Eğik çizgi kullanırken, kendi makinenizdeki bir uzaktan izleme şubesine başvuruyorsunuz, boşluk kullanırken aslında ağ üzerindeki uzak makinedeki bir şubeyle ilgileniyorsunuz.