Jak wypchnąć nową lokalną gałąź do zdalnego repozytorium Git i ją śledzić?

Chcę być w stanie wykonać:

  1. Utwórz lokalną gałąź w oparciu o inną (zdalną lub lokalną) gałąź (poprzez git branch LUB git checkout -b)

  2. Push the local branch do zdalnego repozytorium (publikuj), ale zrób to możliwość śledzenia, więc git pull i git push będą działać natychmiast.

Jak to zrobić?

Wiem o --set-upstream w Git 1.7, ale to jest akcja post-creation. Chcę znaleźć sposób na podobną zmianę przy popychaniu gałęzi do zdalne repozytorium.

Author: Peter Mortensen, 2010-05-04

13 answers

W Git 1.7.0 i nowszych, możesz sprawdzić nową gałąź:

git checkout -b <branch>

Edycja plików, dodawanie i zatwierdzanie. Następnie wciśnij -u (skrót od --set-upstream) wariant:

git push -u origin <branch>

Git skonfiguruje informacje o śledzeniu podczas push.

 5872
Author: Daniel Ruoso,
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
2017-09-23 20:27:17

Jeśli nie udostępniasz swojego repo innym, jest to przydatne, aby wypchnąć wszystkie twoje gałęzie do pilota i --set-upstream śledzić poprawnie dla Ciebie:

git push --all -u

(nie dokładnie to, o co prosiła operacja, ale ten jednowierszowy jest dość popularny)

Jeśli dzielisz się repo z innymi, to nie jest to dobra forma, ponieważ zapchasz repo wszystkimi swoimi podejrzanymi eksperymentalnymi gałęziami.
 455
Author: ErichBSchulz,
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-03-19 01:53:50

Przed wprowadzeniem git push -u, nie było git push opcji, aby uzyskać to, czego pragniesz. Trzeba było dodać nowe instrukcje konfiguracji.

Jeśli utworzysz nową gałąź używając:

$ git checkout -b branchB
$ git push origin branchB:branchB

Możesz użyć polecenia git config, aby uniknąć bezpośredniej edycji pliku .git/config.

$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB

Lub możesz edytować ręcznie plik .git/config, aby mieć informacje o śledzeniu do tej gałęzi.

[branch "branchB"]
    remote = origin
    merge = refs/heads/branchB
 135
Author: Lohrun,
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
2016-02-01 19:54:34

Mówiąc najprościej, aby utworzyć nowylokalny oddział , wykonaj:

git branch <branch-name>

Aby wypchnąć go do repozytorium remote , wykonaj:

git push -u origin <branch-name>
 112
Author: piyushmandovra,
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
2016-02-10 19:30:42

Mała zmiana rozwiązań już podanych tutaj:

  1. Utwórz lokalną gałąź na podstawie innej (zdalnej lub lokalnej) gałęzi:

    git checkout -b branchname
    
  2. Przepchnij lokalną gałąź do zdalnego repozytorium (publish), ale spraw, aby była śledzona, aby git pull i git push działały natychmiast

    git push -u origin HEAD
    

    Użycie {[4] } jest "poręcznym sposobem na przesunięcie bieżącej gałęzi do tej samej nazwy na pilocie". Źródło: https://git-scm.com/docs/git-push W kategoriach Git, HEAD (w uppercase) jest odniesieniem do wierzchołka bieżącej gałęzi (drzewa).

    Opcja -u jest skrótem od --set-setupstream. Spowoduje to dodanie referencji śledzenia dla bieżącej gałęzi. możesz to sprawdzić, patrząc w swoje .plik git/config:

    Tutaj wpisz opis obrazka

 63
Author: bg17aw,
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-05-21 20:15:41

Przypuszczam, że już sklonowałeś taki projekt jak:

git clone http://github.com/myproject.git
  1. Następnie w lokalnej kopii Utwórz nową gałąź i sprawdź ją:

    git checkout -b <newbranch>
    
  2. Załóżmy, że zrobiłeś "Git bare --init" na swoim serwerze i utworzyłeś myapp.git, powinieneś:

    git remote add origin ssh://example.com/var/git/myapp.git
    git push origin master
    
  3. Po tym, użytkownicy powinni być w stanie

    git clone http://example.com/var/git/myapp.git
    

Uwaga: zakładam, że masz uruchomiony serwer. Jeśli nie, to nie zadziała. Dobry poradnik jest tutaj .

Dodano

Dodaj zdalną gałąź:

git push origin master:new_feature_name

Sprawdź, czy wszystko jest dobrze (pobieranie origin i lista zdalnych gałęzi):

git fetch origin
git branch -r

Utwórz lokalną gałąź i śledź zdalną gałąź:

git checkout -tb new_feature_name origin/new_feature_name

Zaktualizuj wszystko:

git pull
 27
Author: VP.,
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
2016-02-10 19:26:59

Po prostu robię

git push -u origin localBranch:remoteBranchToBeCreated

Nad już sklonowanym projektem.

Git tworzy nową gałąź o nazwie remoteBranchToBeCreated pod moim commitem, który zrobiłem w localBranch.

 24
Author: Arda,
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-05-21 20:14:25

Edytuj nieaktualne, wystarczy użyć git push -u origin $BRANCHNAME


Użyj git publish-branch z różnych narzędzi Git Williama (gitorious repo i clone).

Ok, Nie Ruby, więc-ignorując zabezpieczenia! - weź trzy ostatnie linie skryptu i Utwórz skrypt bash, git-publish-branch:

#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git push ${ORIGIN} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}

Następnie uruchom git-publish-branch REMOTENAME BRANCHNAME, gdzie nazwa REMOTENAME jest zwykle origin (możesz zmodyfikować skrypt, aby przyjąć origin jako domyślny, itp...)

 20
Author: Tobias Kienzler,
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
2017-02-22 07:21:59

Aby utworzyć nową gałąź poprzez oddzielenie się od istniejącej gałęzi

git checkout -b <new_branch>

A następnie przepchnąć tę nową gałąź do repozytorium używając

git push -u origin <new_branch>

Tworzy i wypycha wszystkie lokalne commity do nowo utworzonej zdalnej gałęzi origin/<new_branch>

 16
Author: cptjack,
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
2015-06-03 20:36:39

Stworzyłem alias tak, że za każdym razem, gdy utworzę nową gałąź, będzie ona odpowiednio naciskać i śledzić zdalną gałąź. Do pliku .bash_profile wrzucam następujący fragment:

# Create a new branch, push to origin and track that remote branch
publishBranch() {
  git checkout -b $1
  git push -u origin $1
}
alias gcb=publishBranch

Użycie : wystarczy wpisać gcb thuy/do-sth-kool z thuy/do-sth-kool to moja nowa nazwa gałęzi.

 7
Author: Thuy Trinh,
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
2016-01-05 10:11:01

Dla GitLab w wersji przed 1.7, użyj:

git checkout -b name_branch

(nazwa_branch, ex: master)

Aby wypchnąć go do zdalnego repozytorium, wykonaj:

git push -u origin name_new_branch

(nazwa_new_branch, przykład: feature)

 6
Author: Fadid,
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
2017-03-15 16:54:01

Opierając się nieco na odpowiedziach tutaj, zawinąłem ten proces jako prosty skrypt Bash, który oczywiście może być również użyty jako alias Git.

Ważne dla mnie jest to, że monituje mnie to do uruchomienia testów jednostkowych przed zatwierdzeniem i domyślnie przechodzi w bieżącej nazwie gałęzi.

$ git_push_new_branch.sh

  Have you run your unit tests yet? If so, pass OK or a branch name, and try again

  usage: git_push_new_branch {OK|BRANCH_NAME}

  e.g.

  git_push_new_branch           -> Displays prompt reminding you to run unit tests
  git_push_new_branch OK        -> Pushes the current branch as a new branch to the origin
  git_push_new_branch MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the origin

Git_push_new_branch.sh

function show_help()
{
  IT=$(CAT <<EOF

  Have you run your unit tests yet? If so, pass OK or a branch name, and try again

  usage: git_push_new_branch {OK|BRANCH_NAME}

  e.g.

  git_push_new_branch.sh           -> Displays prompt reminding you to run unit tests
  git_push_new_branch.sh OK        -> Pushes the current branch as a new branch to the origin
  git_push_new_branch.sh MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the origin

  )
  echo "$IT"
  exit
}

if [ -z "$1" ]
then
  show_help
fi

CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$1" == "OK" ]
then
  BRANCH=$CURR_BRANCH
else
  BRANCH=${1:-$CURR_BRANCH}
fi

git push -u origin $BRANCH
 1
Author: Brad Parks,
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-06-08 18:39:08

Aby przesłać lokalną gałąź publicznego repozytorium, musisz cd do publicznego repozytorium, a następnie użyć następującego kodu:

git push -u origin branchname
 -8
Author: shankar kumar,
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
2016-02-10 19:31:15