Git uzaktan kumandası 'push' seçeneğine değiştirme


228

Git varsayılan uzak dal hedefini değiştirmek istiyorum, böylece sadece

git push

Onun yerine:

git push upstream

Şu anda bu başlangıç ​​kaynağına ayarlanmış ve farklı bir uzaktan kumandaya ayarlamak istiyorum.

Orijinal (klonlanmış) uzaktan kumandayı kaldırmaya çalıştım

git remote rm origin

Hangi orijinal uzaktan kumandayı çıkardı. Ancak git pushsorunu çözmez . Hala alıyorum:

ölümcül: Yapılandırılmış push hedefi yok. URL'yi
komut satırından belirtin veya aşağıdakileri kullanarak uzak bir havuzu yapılandırın ...

Ben de oynamaya çalıştım:

git remote set-url --push myfork origin

ve diğer seçenekler ama hiçbiri çalışmıyor gibi görünüyor (belki de kaynak uzaklığını çok erken sildiğim için?)

Buradaki cevabı takiben değiştirmeye çalıştım:

git config push.default upstream (or matching)

ama ikisi de işe yaramadı.

Yanıtlar:


215

git push -u <remote_name> <local_branch_name>Varsayılan yukarı akışı ayarlamak için kullanabilirsiniz . Daha fazla bilgi için git push belgelerine bakın.


1
Çalışmıyor: '' 'ölümcül alıyorum:' origin 'bir git deposu ölümcül gibi görünmüyor: Uzak uç beklenmedik bir şekilde kapatıldı' '' belki hareket etmeden önce orijini uzaktan sildim. sadece çalışan bir çözüm buldum, bir cevapta güncelleyeceğim
alonisser

34
Ek bir açıklama olarak, sözdizimi olmalıdır git push -u <remote_name> <local_branch_name>:<corresponding_remote_branch_name>.
Marco Lazzeri

33
Örnek: git push -u origin master:master.
starbeamrainbowlabs

1
Varsayılan bir uzaktan kumandayı ayarladıktan sonra ... git pushGeçerli yerel dalın uzak dalını zorlamaya zorlayabileceğiniz bir şey yok mu? Yani bunu yapmak, bu komutu her dal için çalıştırmam gerektiği anlamına geliyor. Sağ? Reponun tamamı için sadece bir ilk kurulum yapamaz mıyım? @MarcoLazzeri
Honey

2
@starbeamrainbowlabs git push -u origin masterYeterli değil mi? Sadece tam sözdizimini mi gösteriyorsunuz?
Josiah Yoder

109

Hangi yukarı akış uzaktan kumandasının dalınıza "kablolu" olduğunu değiştirmek için git branch, yukarı akış yapılandırma bayrağına sahip komutu kullanın .

Uzaktan kumandanın var olduğundan emin olun:

git remote -vv

Geçerli (kullanıma alınmış) dal için tercih edilen uzaktan kumandayı ayarlayın:

git branch --set-upstream-to <remote-name>

Şubenin doğru yukarı akış uzaktan kumandayla ayarlandığını doğrulayın:

git branch -vv


2
Sadece denedim git branch --set-upstream-to myforkve bir hata var:> hata: bilinmeyen seçenek `set-upstream-to 'koşuyorum git 1.7.9
alonisser

3
Sözdizimi 1.8 olarak değişti, bkz. Stackoverflow.com/questions/520650/…
jtniehof

1
Aşağıdaki cevaba bakın: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
Yinon Ehrlich

10
git branch -u <remotename>/<branch>benim için çalıştı. Komut, yerel ilgi alanı kontrol edilmiş olarak çalıştırıldı. Git-scm.com/book/it/v2/Git-Branching-Remote-Branches
norio

2
Uzaktan komut ayrıntılı çıktı gerçekten sadece git remote -vveya git remote --verbose. -vv'In ekstra v gereksiz olduğunu.
Artif3x

46

Git 2.3.2 ile çalışma ...

git branch --set-upstream-to myfork/master

Şimdi status, pushve uzak pullişaretmyfork


Bu, yalnızca varsayılanı da ayarlamak istediğinizde çalışır pull.
StingyJack

39

Bu komutu kullanarak şubeler için varsayılan uzaktan kumandayı kolayca değiştirebilirsiniz

git push -u <remote_name> --all

14
Sadece not etmek gerekirse, bu hepsini yukarı itecek ve yukarı akış uzaktan kumandalarını değiştirecektir.
poolie

16

Yaptıysanız git push origin -u localBranchName:remoteBranchNameve ardışık olarak git pushkomutlar verdiyseniz, başlangıç ​​noktası olmayan hatalar alırsınız ve aşağıdaki adımları izleyin:

  1. git remote -v

Umurumda olmayan uzaktan kumanda olup olmadığını kontrol edin. Onları ile silgit remote remove 'name'

  1. git config --edit

Eski / var olmayan bir uzaktan kumandanın olası işaretlerini arayın. Şunu ara pushdefault:

[remote]
  pushdefault = oldremote

oldremoteDeğeri güncelleyin ve kaydedin.

git push şimdi çalışmalı.


2
Teşekkürler! Kas hafızası nedeniyle farklı bir uzaktan kumanda -ukullanırken ekleme eğilimindeyim git push. Bu, verilen uzaktan kumandayı varsayılan yapar, kullanarak geri ayarlamak git config --edit(veya tekrar itmek ve yeni bir uzaktan kumanda ayarlamak) sorunu çözdü.
Tim Visée

13

Sadece bir açıklama (Ubuntu 12.04'te git 1.7.9.5 sürümünü kullanarak):

Git uzaktan kumanda ekleyecek / kaldıracaktır. Bunlar sunucuya bağlı uzak git örnekleridir.

git remote add myremote git://remoteurl

Sonra git git deposunu şöyle getirebilirsiniz:

git fetch myremote

Bu, 'myremote' adlı bir dal oluşturuyor gibi görünüyor, ancak dalın uzaktan kumandası otomatik olarak ayarlanmadı. Bunu yapmak için aşağıdakileri yapmanız gerekir:

İlk olarak, bu sorunun bulunduğunu doğrulayın, yani

git config -l | grep myremote

Şuna benzer bir şey görmelisiniz:

remote.myremote.url=git://remoteurl
remote.myremote.fetch=+refs/heads/*:refs/remotes/myremote/*
branch.myremote.remote=.
branch.myremote.merge=refs/heads/master

Eğer görürseniz branch.myremote.remote=., devam etmelisiniz:

git config branch.myremote.remote myremote
git checkout myremote
git pull

Şimdi uzak depodan haberdar olmalısınız ve çekme / itme işlemleriniz uygun uzaktan kumandaya bağlanmalıdır. Uzaktan kumandaları şube başına bu şekilde değiştirebilirsiniz . [Not 1]

Göre bir Resmi Git Yapılandırma Belgeler , bir ayarlayabilirsiniz varsayılan ama sadece bu işe bu yüzden, bu zaten mevcut depoları / şube etkilemeyeceğini unutmayın ancak, itme kolu (sadece o sayfadaki remote.pushdefault bulun) yeni depolar / şubeler için. Sen hatırlamalıyız --global(~ / .gitconfig), kullanıcıya özel depo varsayılan ayarlar --system(/ etc / gitconfig) sistem genelinde depo varsayılan ayarlar ve hiçbir bayrak akım deposundan (./.gitconfig) için yapılandırma seçeneklerini ayarlayacaktır.

Ayrıca, push.default config seçeneğinin uzaktan davranış değil ref-spec davranışını yapılandırmak için olduğuna dikkat edilmelidir .

[1]: git branch --set-upstream myotherremotegenellikle burada çalışır, ancak git git branch --set-upstream myremotekullanılırsa bir dalı kendi uzaktan kumandası olarak ayarlamayacağından şikayet eder . Ancak bunun yanlış bir davranış olduğuna inanıyorum.


Onun yerine git config -l | grep myremote , şunları kullanabilirsiniz:git config --get branch.myremote.remote
Murmel

@Murmel ilk olarak, bu bir topluluk wiki'sini geliştirmekten çekinmeyin, ikinci olarak, --getbelirli davranışlar varsa, akışları ayarlamanın başka yolları olduğunu not ediyorum, ancak bu sadece git takımına güvenmeden bilgileri bulmanın bir yolunu sunuyor doğru. Git mükemmel değil, verileri anlamak, ne yaptığını anlamak ve ardından çağrılarının uygun şekilde çalışmasını ummak daha iyi.
smaudet

10

.git/configRepounuzun içine bakmak yararlı olabilir , tüm uzaktan kumandaları ve her dal için varsayılan uzaktan kumandayı listeleyecektir

Örneğin.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@gitea.xxx.be:fii/web2016.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "bugfix/#8302"]
    remote = origin
    merge = "refs/heads/bugfix/#8302"
[branch "feature/#8331"]
    remote = origin
    merge = "refs/heads/feature/#8331"
[remote "scm"]
    url = https://scm.xxx.be/git/web2016bs.git
    fetch = +refs/heads/*:refs/remotes/scm/*

istenmeyen bir uzaktan kumandayı kaldırmak için bu dosyada manuel değişiklikler yapabilir veya sahip olduğunuz farklı dallar için varsayılan uzaktan kumandaları güncelleyebilirsiniz

  • Çok dikkat! uzaktan kumandaları değiştirirken veya kaldırırken bu yapılandırma dosyasındaki tüm referansları güncellediğinizden emin olun

5

Bu sorunu çözmek için bulduğum başka bir teknik (ilk önce kökeni silmiş olsam bile, hata gibi görünüyor) doğrudan git config'i manipüle ediyor:

git config remote.origin.url url-to-my-other-remote

5
Bu iyi bir çözüm değil, git kullanıcıları birden fazla depodan çekebilmeli / itebilmelidir - bu orijinalin uzaktan kumandasını değiştirmenize izin verse de, orijinalin uzaktan kumandasını değiştirmeniz gerektiği anlamına gelmez, çünkü bu muhtemelen uzaktan kumandalar arasındaki bazı uyumsuzluklardır. Birleştirme burada yardımcı olacaktır, ancak uzaktan kumandayı yeni dalda ayarlamak hem daha basittir hem de daha fazla geçmişi korur.
smaudet

Bunu yapmanın doğru yolu değil ... @ Ürdün'ün cevabı daha uygun
Raja Anbazhagan

1
Ayrıca bakınız: stackoverflow.com/a/2432799/1820106 ( git remote set-url origin PATH_TO_REMOTE)
Yinon Ehrlich

5

Çok basit, ve buradaki kendi araştırmalarımla birlikte bazı harika yorumları bir araya getiriyorum.

İlk olarak, uzak şubenize bağlamak istediğiniz yerel şubeye göz atın:

git checkout mybranch

Sonraki:

git branch -u origin/mybranch

nerede:

git branch -u {remote name}/{branch name}

Bir mesaj almalısınız:

"Branch mybranch set up to track remote branch mybranch from origin."

3

Benim durumumda, aşağıdakilerle düzelttim: * run git config --edit * git config dosyasında:

[branch "master"]
remote = origin # <--- change the default origin here

0

git remote set-url --push origin belirttiğiniz gibi çalışmalıdır, ancak alternatif bir uzak ad yerine URL'yi açıkça belirtmeniz gerekir; ör.

git remote set-url --push origin git@github.com:contributor/repo.git

Bunun işe yarayıp yaramadığını bir git remote -v. Örneğin

λ ~/go/src/github.com/stretchr/testify/ master git remote -v
fork    git@github.com:contributor/testify.git (fetch)
fork    git@github.com:contributor/testify.git (push)
origin  git@github.com:stretchr/testify (fetch)
origin  git@github.com:contributor/testify.git (push)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.