Prosiłeś, żebym ciągnął bez mówienia, z którą gałęzią chcesz się połączyć

TL;DR: mam gałąź "śledzoną", której nie mogę wyciągnąć.

Więc jestem w "wiadrze-4":

$ git branch -v
  bucket-1       410f7b5 * gh-53 * gh-48 * "Share App"
  bucket-2       7ed70a2 * upgrade to SOLR 3.3.0
  bucket-3       400ffe4 * emergency fix prod issue
* bucket-4       64c2414 Merge branch 'bucket-3' into bucket-4
  master         8dc4854 [ahead 1] * gh-73

Chciałbym ściągnąć zmiany z mojego pilota:

$ git pull

You asked me to pull without telling me which branch you
want to merge with, and 'branch.bucket-4.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "bucket-4"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.
Hmm, dziwne, myślałem, że już dodałem "bucket-4" jako gałąź śledzenia. Zobaczmy:
$ git remote show origin
* remote origin
  Fetch URL: [email protected]:abcd/main.git
  Push  URL: [email protected]:abcd/main.git
  HEAD branch (remote HEAD is ambiguous, may be one of the following):
    bucket-3
    master
  Remote branches:
    bucket-1       tracked
    bucket-2       tracked
    bucket-3       tracked
    bucket-4       tracked
    master         tracked
  Local branches configured for 'git pull':
    bucket-1       merges with remote bucket-1
    bucket-2       merges with remote bucket-2
    bucket-3       merges with remote bucket-3
    master         merges with remote master
  Local refs configured for 'git push':
    bucket-1       pushes to bucket-1       (up to date)
    bucket-2       pushes to bucket-2       (up to date)
    bucket-3       pushes to bucket-3       (up to date)
    bucket-4       pushes to bucket-4       (local out of date)
    master         pushes to master         (fast-forwardable)

Rzeczywiście, bucket-4 jest oznaczony jako "śledzony" , ale jakoś jest skonfigurowany do pchania, ale nie ciągnięcia.

Patrząc na mój plik .git/config, widzę, że mam wpisy " remote "i" merge " dla większości moich gałęzi, ale nie dla wiadro-4. Jak to jest w ogóle uważane za "śledzone" bez tego?

[remote "origin"]
    url = [email protected]:abcd/main.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "rel-2011-07-07"]
    remote = origin
    merge = refs/heads/rel-2011-07-07
[branch "bucket-1"]
    remote = origin
    merge = refs/heads/bucket-1
[branch "bucket-2"]
    remote = origin
    merge = refs/heads/bucket-2
[branch]
    autosetupmerge = true
[branch "bucket-3"]
    remote = origin
    merge = refs/heads/bucket-3

Widzę, że prawdopodobnym rozwiązaniem jest dodanie remote/merge wpisów dla bucket-4 do mojego pliku konfiguracyjnego. Ale jak to jest uważane za "śledzone" bez tego? bucket-4 został stworzony lokalnie, a następnie wypchnięty na serwer z tego repo, więc podejrzewam, że jakoś nie skonfigurowałem śledzenia poprawnie dla tej gałęzi.

Czy jest jakaś konfiguracja, którą mogę dodać, aby wszystkie lokalne oddziały prawidłowo śledziły swoje piloty w przyszłości?

 119
Author: Habeeb Perwad, 2011-09-12

2 answers

Jest napisane bucket-4 pushes to bucket-4 tylko dlatego, że domyślnym naciśnięciem gałęzi jest przesunięcie jej do jednej z pasującą nazwą na pilocie. (Zauważ, że nadal jest to domyślne, nawet jeśli lokalna gałąź śledzi gałąź zdalnego śledzenia, a gałąź zdalnego śledzenia odpowiada gałęzi o innej nazwie w zdalnym repozytorium.)

Najprostszym sposobem skonfigurowania związku pomiędzy bucket-4 i bucket-4 w origin jest upewnienie się, że następnym razem, gdy naciśniesz, do:

git push -u origin bucket-4

Alternatywnie możesz zrobić:

git branch --set-upstream-to origin/bucket-4

Aby odpowiedzieć bezpośrednio na kilka pytań:

Jak to jest w ogóle uważane za "śledzone" bez tego?

W tym przypadku nie jest-nie śledzi gałęzi remote-tracking w żadnym sensie, jeśli nie ma branch.bucket-4.merge lub branch.bucket-4.remote w Twoim Git config. Wyjście git remote show origin pokazuje tylko, gdzie branch będzie domyślnie wypychany.

Czy jest jakaś konfiguracja, którą mogę dodać w chcesz, aby wszystkie lokalne oddziały prawidłowo śledziły swoje piloty w przyszłości?

Nie wydaje mi się. Kiedy tworzyłeś bucket-4 lokalnie, jak zakładam, gałąź zdalnego śledzenia nie istniała, więc nie można jej skonfigurować w tym momencie - byłoby to bardzo mylące domyślne zachowanie. Musisz tylko pamiętać, aby dodać -u do swojej pierwszej git push tej gałęzi do jej repozytorium. Mam nadzieję, że to pomoże.
 185
Author: Mark Longair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-28 12:03:47

git branch --set-upstream <branch> origin/<branch> był przestarzały co najmniej od 1.8.2.3 (moja wersja).

Zamiast tego użyj git branch --set-upstream-to=origin/<branch> <branch>.

 3
Author: d_roge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-06 17:43:35