Git
Rozgałęzienie
Szukaj…
Składnia
-
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
-
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
-
git branch --unset-upstream [<branchname>]
-
git branch (-m | -M) [<oldbranch>] <newbranch>
-
git branch (-d | -D) [-r] <branchname>…
-
git branch --edit-description [<branchname>]
-
git branch [--color[=<when>] | --no-color] [-r | -a] [--list] [-v [--abbrev=<length> | --no-abbrev]] [--column[=<options>] | --no-column] [(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>] [--points-at <object>] [<pattern>…]
Parametry
Parametr | Detale |
---|---|
-d, --delete | Usuń gałąź. Gałąź musi być w pełni połączona w swoim odgałęzieniu wyższym lub w HEAD jeśli nie ustawiono --track pomocą opcji --track lub --set-upstream |
-RE | Skrót do --delete --force |
-m, --move | Przenieś / zmień nazwę gałęzi i odpowiedniego dziennika |
-M | Skrót do --move --force |
-r, --remotes | Wyświetl lub usuń (jeśli używasz z -d) gałęzie zdalnego śledzenia |
-a, --all | Wymień zarówno oddziały zdalnego śledzenia, jak i oddziały lokalne |
--lista | Aktywuj tryb listy. git branch <pattern> spróbuje utworzyć gałąź, użyj git branch --list <pattern> aby wyświetlić listę pasujących gałęzi |
--set-upstream | Jeśli określona gałąź jeszcze nie istnieje lub podano --force , działa dokładnie tak samo jak --track . W przeciwnym razie konfiguruje konfigurację, taką jak --track zrobiłby podczas tworzenia gałęzi, z wyjątkiem sytuacji, gdy gałąź, na którą wskazuje gałąź, nie jest zmieniana |
Uwagi
Każde repozytorium git ma jedną lub więcej gałęzi . Gałąź jest nazwanym odniesieniem do HEAD
sekwencji zatwierdzeń.
Repozytorium git ma bieżącą gałąź (oznaczoną *
na liście nazw gałęzi wydrukowanej przez komendę git branch
). Za każdym razem, gdy tworzysz nowe zatwierdzenie za pomocą polecenia git commit
, nowe zatwierdzenie staje się HEAD
bieżącej gałęzi i poprzedni HEAD staje się rodzicem nowego zatwierdzenia.
Nowa gałąź będzie miała tę samą HEAD
co gałąź, z której została utworzona, dopóki coś nie zostanie przypisane do nowej gałęzi.
Wykaz oddziałów
Git udostępnia wiele poleceń do wyświetlania gałęzi. Wszystkie polecenia używają funkcji git branch
, która wyświetli listę niektórych gałęzi, w zależności od opcji umieszczonych w linii poleceń. Git w miarę możliwości wskaże aktualnie wybraną gałąź z gwiazdą obok niej.
Cel | Komenda |
---|---|
Lista lokalnych oddziałów | git branch |
Wyświetlaj pełne oddziały lokalne | git branch -v |
Lista zdalnych i lokalnych oddziałów | git branch -a LUB git branch --all |
Lista zdalnych i lokalnych oddziałów (pełne) | git branch -av |
Lista zdalnych oddziałów | git branch -r |
Lista zdalnych gałęzi z najnowszym zatwierdzeniem | git branch -rv |
Lista połączonych oddziałów | git branch --merged |
Lista nie połączonych gałęzi | git branch --no-merged |
Lista gałęzi zawierających zatwierdzenie | git branch --contains [<commit>] |
Uwagi :
- Dodanie dodatkowego
v
do-v
np.$ git branch -avv
lub$ git branch -vv
, wypisze również nazwę gałęzi upstream. - Gałęzie pokazane na czerwono to odległe gałęzie
Tworzenie i sprawdzanie nowych oddziałów
Aby utworzyć nowy oddział, pozostając w bieżącym oddziale, użyj:
git branch <name>
Zasadniczo nazwa oddziału nie może zawierać spacji i podlega innym wymienionym tutaj specyfikacjom. Aby przejść do istniejącego oddziału:
git checkout <name>
Aby utworzyć nowy oddział i przejść do niego:
git checkout -b <name>
Aby utworzyć gałąź w punkcie innym niż ostatni zatwierdzenie bieżącej gałęzi (znanej również jako HEAD), użyj jednego z następujących poleceń:
git branch <name> [<start-point>]
git checkout -b <name> [<start-point>]
<start-point>
może być dowolną wersją znaną git (np. Inną nazwę gałęzi, zatwierdzenie SHA lub odwołanie symboliczne, takie jak HEAD lub nazwa znacznika):
git checkout -b <name> some_other_branch
git checkout -b <name> af295
git checkout -b <name> HEAD~5
git checkout -b <name> v1.0.5
Aby utworzyć gałąź ze zdalnej gałęzi (domyślna <remote_name>
to origin):
git branch <name> <remote_name>/<branch_name>
git checkout -b <name> <remote_name>/<branch_name>
Jeśli dana nazwa oddziału znajduje się tylko na jednym pilocie, możesz po prostu użyć
git checkout -b <branch_name>
co jest równoważne z
git checkout -b <branch_name> <remote_name>/<branch_name>
Czasami może być konieczne przeniesienie kilku ostatnich zatwierdzeń do nowego oddziału. Można to osiągnąć przez rozgałęzienie i „wycofanie”, w następujący sposób:
git branch <new_name>
git reset --hard HEAD~2 # Go back 2 commits, you will lose uncommitted work.
git checkout <new_name>
Oto przykładowe wyjaśnienie tej techniki:
Initial state After git branch <new_name> After git reset --hard HEAD~2
newBranch newBranch
↓ ↓
A-B-C-D-E (HEAD) A-B-C-D-E (HEAD) A-B-C-D-E (HEAD)
↑ ↑ ↑
master master master
Usuń oddział lokalnie
$ git branch -d dev
Usuwa gałąź o nazwie dev
jeśli jej zmiany zostaną scalone z inną gałęzią i nie zostaną utracone. Jeśli dev
oddział nie zawiera zmian, które jeszcze nie zostały scalone, które zostałyby utracone, git branch -d
nie powiedzie się:
$ git branch -d dev
error: The branch 'dev' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev'.
Zgodnie z komunikatem ostrzegawczym możesz wymusić usunięcie gałęzi (i utracić wszelkie nie połączone zmiany w tej gałęzi) za pomocą flagi -D
:
$ git branch -D dev
Sprawdź nowy oddział śledzący oddział zdalny
Istnieją trzy sposoby utworzenia nowej feature
gałęzi, która śledzi origin/feature
zdalnego gałęzi:
-
git checkout --track -b feature origin/feature
, -
git checkout -t origin/feature
, -
git checkout feature
- zakładając, że nie ma lokalnej gałęzifeature
i jest tylko jeden zdalny z gałęziąfeature
.
Aby ustawić upstream do śledzenia zdalnej gałęzi - wpisz:
-
git branch --set-upstream-to=<remote>/<branch> <branch>
-
git branch -u <remote>/<branch> <branch>
gdzie:
-
<remote>
może być:origin
,develop
lub utworzone przez użytkownika, -
<branch>
to<branch>
użytkownika do śledzenia na odległość.
Aby sprawdzić, które oddziały zdalne śledzą Twoje oddziały lokalne:
-
git branch -vv
Zmień nazwę oddziału
Zmień nazwę oddziału, który sprawdziłeś:
git branch -m new_branch_name
Zmień nazwę innej gałęzi:
git branch -m branch_you_want_to_rename new_branch_name
Zastąp pojedynczy plik w bieżącym katalogu roboczym tym samym z innego oddziału
Wyewidencjonowany plik nadpisze jeszcze niezatwierdzone zmiany, które wprowadziłeś w tym pliku.
To polecenie sprawdzi plik file.example
(który znajduje się w path/to/
katalogu path/to/
) i zastąpi wszelkie zmiany, które mogłeś wprowadzić w tym pliku.
git checkout some-branch path/to/file
some-branch
może być dowolnym tree-ish
znanym gitowi (zobacz Wybór wersji i gitrevisions po więcej szczegółów)
Musisz dodać --
przed ścieżką, jeśli Twój plik może zostać pomylony z plikiem (opcjonalnie w przeciwnym razie). Brak więcej opcji mogą być dostarczane po --
.
git checkout some-branch -- some-file
Drugi some-file
to plik w tym przykładzie.
Usuń zdalną gałąź
Aby usunąć gałąź na origin
repozytorium zdalnego można użyć do Git wersji 1.5.0 i nowszych
git push origin :<branchName>
a od wersji Git 1.7.0 możesz usunąć zdalną gałąź za pomocą
git push origin --delete <branchName>
Aby usunąć lokalną gałąź zdalnego śledzenia:
git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter
git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p # Shorter
Aby usunąć oddział lokalnie. Pamiętaj, że nie spowoduje to usunięcia oddziału, jeśli wystąpią w nim jakieś nie połączone zmiany:
git branch -d <branchName>
Aby usunąć gałąź, nawet jeśli nie ma połączonych zmian:
git branch -D <branchName>
Utwórz gałąź osieroconą (tj. Gałąź bez zatwierdzenia nadrzędnego)
git checkout --orphan new-orphan-branch
Pierwsze zatwierdzenie dokonane w tej nowej gałęzi nie będzie miało rodziców i będzie źródłem nowej historii całkowicie odłączonej od wszystkich innych gałęzi i zobowiązań.
Wciśnij gałąź do pilota
Służy do wypychania zatwierdzeń dokonanych w lokalnym oddziale do zdalnego repozytorium.
Polecenie git push
przyjmuje dwa argumenty:
- Zdalna nazwa, na przykład
origin
- Nazwa oddziału, na przykład
master
Na przykład:
git push <REMOTENAME> <BRANCHNAME>
Na przykład zazwyczaj uruchamiasz git push origin master
aby przesłać lokalne zmiany do repozytorium online.
Użycie -u
(skrót od --set-upstream
) spowoduje ustawienie informacji o śledzeniu podczas wypychania.
git push -u <REMOTENAME> <BRANCHNAME>
Domyślnie git
wypycha gałąź lokalną do gałęzi zdalnej o tej samej nazwie. Na przykład, jeśli masz lokalną funkcję o nazwie new-feature
, naciśnięcie gałęzi lokalnej spowoduje utworzenie new-feature
oddziału zdalnego. Jeśli chcesz użyć innej nazwy dla zdalnego oddziału, dołącz nazwę zdalnej po lokalną nazwą oddziału, oddzielone przez :
:
git push <REMOTENAME> <LOCALBRANCHNAME>:<REMOTEBRANCHNAME>
Przenieś bieżącą gałąź HEAD do dowolnego zatwierdzenia
Gałąź jest tylko wskaźnikiem zatwierdzenia, więc możesz swobodnie ją przenosić. Aby było tak, aby gałąź odwoływała się do zatwierdzenia aabbcc
, wydaj polecenie
git reset --hard aabbcc
Pamiętaj, że spowoduje to zastąpienie bieżącego zatwierdzenia twojego oddziału, a tym samym całej jego historii. Możesz stracić trochę pracy, wydając to polecenie. W takim przypadku możesz użyć rejestru, aby odzyskać utracone zatwierdzenia. Zaleca się wykonanie tego polecenia w nowym oddziale zamiast w bieżącym.
Jednak to polecenie może być szczególnie przydatne podczas zmiany lub wykonywania innych dużych modyfikacji historii.
Szybkie przejście do poprzedniej gałęzi
Możesz szybko przejść do poprzedniego oddziału za pomocą
git checkout -
Wyszukiwanie w oddziałach
Aby wyświetlić listę lokalnych oddziałów, które zawierają określone zatwierdzenie lub znacznik
git branch --contains <commit>
Aby wyświetlić listę lokalnych i zdalnych gałęzi, które zawierają określone zatwierdzenie lub znacznik
git branch -a --contains <commit>