Git
Förgrening
Sök…
Syntax
-
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>…]
parametrar
Parameter | detaljer |
---|---|
-d, - ta bort | Radera en gren. Grenen måste vara helt sammanslagd i sin uppströms gren, eller i HEAD om ingen uppströms ställts in med - --track eller - --set-upstream |
-D | Genväg för - --delete --force |
-m, - flytta | Flytta / byta namn på en gren och motsvarande återloggning |
-M | Genväg för - --move --force |
-r, - fjärrkontroll | Lista eller ta bort (om de används med -d) grenarna för fjärrspårning |
-a, - allt | Lista både fjärrspårande grenar och lokala filialer |
--lista | Aktivera listläget. git branch <pattern> skulle försöka skapa en gren, använd git branch --list <pattern> att lista matchande grenar |
--set-uppströms | Om specificerad gren inte existerar ännu eller om - --force har givits, fungerar exakt som - --track . I annat fall ställer du in konfiguration som - spår skulle göra när du skapar grenen, förutom att där grenen pekar till inte ändras |
Anmärkningar
Varje gitförvar har en eller flera grenar . En gren är en namngiven referens till HEAD
för en sekvens av åtaganden.
En git-repo har en aktuell filial (indikeras med en *
i listan över grennamn som skrivs ut av kommandot git branch
). När du skapar ett nytt engagemang med kommandot git commit
blir ditt nya åtagande HEAD
för den nuvarande grenen, och den tidigare HEAD blir förälder till det nya engagemanget.
En ny filial kommer att ha samma HEAD
som den gren från vilken den skapades till dess att något har åtagit sig den nya grenen.
Lista grenar
Git tillhandahåller flera kommandon för listning av grenar. Alla kommandon använder funktionen av git branch
, som ger en lista över vissa grenar, beroende på vilka alternativ som finns på kommandoraden. Git anger om möjligt den för närvarande valda grenen med en stjärna bredvid.
Mål | Kommando |
---|---|
Lista lokala filialer | git branch |
Lista lokala grenar ordbok | git branch -v |
Lista avlägsna och lokala grenar | git branch -a ELLER git branch --all |
Lista avlägsna och lokala grenar (ord) | git branch -av |
Lista avlägsna grenar | git branch -r |
Lista fjärrgrenar med senaste åtaganden | git branch -rv |
Lista sammanslagna grenar | git branch --merged |
Lista obegränsade grenar | git branch --no-merged |
Lista grenar som innehåller engagemang | git branch --contains [<commit>] |
Anmärkningar :
- Att lägga till ytterligare
v
till-v
t.ex.$ git branch -avv
eller$ git branch -vv
kommer också att skriva ut namnet på uppströmsgrenen. - Grenar som visas i röd färg är avlägsna grenar
Skapa och kolla in nya grenar
För att skapa en ny gren, medan du stannar kvar i den nuvarande grenen, använd:
git branch <name>
I allmänhet får filialnamnet inte innehålla mellanslag och omfattas av andra specifikationer som anges här . Så här byter du till en befintlig filial:
git checkout <name>
Så här skapar du en ny gren och byter till den:
git checkout -b <name>
För att skapa en gren på en annan punkt än den senaste åtagandet för den nuvarande grenen (även känd som HEAD) använder du någon av dessa kommandon:
git branch <name> [<start-point>]
git checkout -b <name> [<start-point>]
<start-point>
kan vara vilken revision som helst som är känd för git (t.ex. ett annat grennamn, begå SHA eller en symbolisk referens som HEAD eller ett tagnamn):
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
Så här skapar du en gren från en fjärrgren (standard <remote_name>
är ursprung):
git branch <name> <remote_name>/<branch_name>
git checkout -b <name> <remote_name>/<branch_name>
Om ett visst grennamn bara finns på en fjärrkontroll kan du helt enkelt använda
git checkout -b <branch_name>
vilket motsvarar
git checkout -b <branch_name> <remote_name>/<branch_name>
Ibland kan du behöva flytta flera av dina senaste åtaganden till en ny filial. Detta kan uppnås genom att förgrena sig och "rulla tillbaka", så:
git branch <new_name>
git reset --hard HEAD~2 # Go back 2 commits, you will lose uncommitted work.
git checkout <new_name>
Här är en illustrativ förklaring av denna teknik:
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
Radera en gren lokalt
$ git branch -d dev
Tar bort den gren som heter dev
om dess förändringar slås samman med en annan gren och inte går förlorade. Om dev
grenen innehåller ändringar som ännu inte har släppts samman som skulle gå förlorade, kommer git branch -d
att misslyckas:
$ 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'.
Enligt varningsmeddelandet kan du tvinga ta bort grenen (och förlora eventuella obegränsade ändringar i den grenen) med hjälp av -D
flaggan:
$ git branch -D dev
Kolla in en ny filial som spårar en fjärrfilial
Det finns tre sätt att skapa en ny feature
som spårar det fjärrgrenade origin/feature
:
-
git checkout --track -b feature origin/feature
, -
git checkout -t origin/feature
, -
git checkout feature
- förutsatt att det inte finns någon lokalfeature
och att det bara finns en fjärrkontroll medfeature
.
Så här ställer du in uppströmmen för att spåra den fjärrgrenade typen:
-
git branch --set-upstream-to=<remote>/<branch> <branch>
-
git branch -u <remote>/<branch> <branch>
var:
-
<remote>
kan vara:origin
,develop
eller den som skapats av användaren, -
<branch>
är användarens gren att spåra på fjärrkontrollen.
För att verifiera vilka fjärrgrenar dina lokala filialer spårar:
-
git branch -vv
Byt namn på en gren
Byt namn på filialen du har checkat ut:
git branch -m new_branch_name
Byt namn på en annan gren:
git branch -m branch_you_want_to_rename new_branch_name
Skriv över en enda fil i den aktuella arbetskatalogen med samma från en annan gren
Den utcheckade filen kommer att skriva över ändringar som du gjorde i den här filen än.
Detta kommando kommer att kolla in filen file.example
(som finns i path/to/
) och skriv över alla ändringar du kan ha gjort i den här filen.
git checkout some-branch path/to/file
some-branch
kan vara allt tree-ish
känt för git (se Revisionsval och gitrevisioner för mer information)
Du måste lägga till --
innan sökvägen om din fil kan misstas för en fil (valfritt annars). Inga fler alternativ kan tillhandahållas efter --
.
git checkout some-branch -- some-file
Den andra some-file
är en fil i det här exemplet.
Radera en fjärrgren
Om du vill ta bort en gren i origin
fjärrlager kan du använda för Git version 1.5.0 och nyare
git push origin :<branchName>
och från Git version 1.7.0 kan du ta bort en fjärrgren med
git push origin --delete <branchName>
Så här tar du bort en lokal fjärrspårningsgren:
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
För att radera en gren lokalt. Observera att detta inte kommer att ta bort grenen om den inte har några ändrade ändringar:
git branch -d <branchName>
Så här tar du bort en gren, även om den har obearbetade ändringar:
git branch -D <branchName>
Skapa en föräldralös gren (dvs. filial utan förälderåtagande)
git checkout --orphan new-orphan-branch
Det första åtagandet som gjorts för denna nya gren kommer inte att ha några föräldrar och det kommer att vara roten till en ny historia helt kopplad från alla andra grenar och åtaganden.
Tryck grenen till fjärrkontrollen
Används för att flytta åtaganden gjorda på din lokala filial till ett fjärrlager.
git push
kommandot tar två argument:
- Ett fjärrnamn, till exempel,
origin
- Ett filialnamn, till exempel
master
Till exempel:
git push <REMOTENAME> <BRANCHNAME>
Som ett exempel kör du vanligtvis git push origin master
att driva dina lokala förändringar i ditt onlineförvar.
--set-upstream
använder -u
(förkortning för - --set-upstream
) kommer du att ställa in spårningsinformationen under tryckningen.
git push -u <REMOTENAME> <BRANCHNAME>
Som standard trycker git
den lokala grenen till en fjärrgren med samma namn. Till exempel, om du har en lokal som kallas new-feature
, om du trycker den lokala grenen kommer det att skapa en avlägsen gren new-feature
också. Om du vill använda ett annat namn för fjärr gren, lägga fjärrkontrollen namn efter den lokala grenen namn, separerade med :
:
git push <REMOTENAME> <LOCALBRANCHNAME>:<REMOTEBRANCHNAME>
Flytta nuvarande gren HEAD till ett godtyckligt engagemang
En gren är bara en pekare till en åtagande, så att du fritt kan flytta den runt. För att göra det så att grenen hänvisar till commit aabbcc
, utfärda kommandot
git reset --hard aabbcc
Observera att detta kommer att skriva över filialens nuvarande åtagande, och som så, hela historien. Du kan tappa lite arbete genom att utfärda det här kommandot. Om så är fallet kan du använda refloggen för att återställa de förlorade åtagandena. Det kan rekommenderas att utföra detta kommando på en ny gren istället för din nuvarande.
Detta kommando kan emellertid vara särskilt användbart när du omsätter eller gör sådana andra stora historikmodifieringar.
Snabbväxling till föregående gren
Du kan snabbt växla till föregående gren med
git checkout -
Sök i grenar
För att lista lokala grenar som innehåller ett specifikt engagemang eller tagg
git branch --contains <commit>
För att lista lokala och fjärrgrenar som innehåller ett specifikt engagemang eller tagg
git branch -a --contains <commit>