වර්තමාන ශාඛා නාමය Git වෙතින් ලබා ගන්නේ කෙසේද?


2613

මම උපසිරැසි පසුබිමක සිටින අතර, මට ශාඛාවක් ඇති විට, "මෙම වැඩකරන ලිපිගොනු මෙම ශාඛාවට යොමු කරයි" සමඟ මා වැඩ කරන්නේ කුමක් දැයි මම දැන සිටියෙමි.

නමුත් Git සමඟ මම නෙට්බීන්ස් හෝ නොට්පෑඩ් ++ හි ගොනුවක් සංස්කරණය කරන්නේ කවදාදැයි විශ්වාස නැත, එය මාස්ටර් හෝ වෙනත් ශාඛාවකට බැඳී තිබේද යන්න.

බාෂ් වල කිසිදු ගැටළුවක් නැත git, එය මා කරන දේ මට කියයි.


11
ඔබගේ IDE ගොනුව .git/HEADමව් නාමාවලියක පෙන්වීමට ඉඩ දෙන්න
Tino




9
Git 2.22 (Q2 2019) සමඟ, ඔබට වඩාත් සරල ප්‍රවේශයක් ඇත : git branch --show-current. මගේ පිළිතුර මෙතැනින් බලන්න .
VonC

Answers:


2336
git branch

ඔබේ ගබඩාවේ සියලුම දේශීය ශාඛා පෙන්විය යුතුය. තරු ලකුණු කළ ශාඛාව ඔබේ වර්තමාන ශාඛාවයි.

ඔබ සිටින ශාඛාවේ නම පමණක් ලබා ගැනීමට ඔබට අවශ්‍ය නම්, ඔබට කළ හැක්කේ:

git rev-parse --abbrev-ref HEAD

නමුත් එය මට Notepad ++ සහ Netbeans සමඟ උදව් නොකරයි. ගිට් බාෂ් (සහ බොහෝ විට විම්) සහ මම එය සඳහන් කළෙමි. විධාන රේඛාව නොමැති වෙනත් අයිඩීස් සහ පෙළ සංස්කාරකවරුන් සමඟ වැඩ කිරීමට මම උත්සාහ කරමි.
mike628

ike mike628 ඇත්ත වශයෙන්ම ඔවුන් ඔබට උදව් කරන්නේ ඔබට GUI හරහා ප්‍රවේශ විය හැකි යමක් අවශ්‍ය නම් පමණි. නිවැරදි?
ටැඩෙක්

2
ඔබ සූර්යග්‍රහණයේ වැඩ කිරීමට කැමති නම්, GUI එකක් ඇති "eGit" නම් වැඩසටහනක් ඇත, එමඟින් එහි ඇති සියලුම ගබඩාවන් සඳහා වත්මන් ශාඛාව ඔබට කියනු ඇත. එසේ නොමැතිනම්, මම නොදනිමි .. ඔබ භාවිතා කිරීමට කැමති ඕනෑම ප්ලගිනයක නිර්මාතෘගේ දයාවෙන් ඔබ තෝරා ගනු ඇත (එය තිබේ නම්).
roberttdev

2
එසේ කිරීමෙන් git checkout --orphan fooපසුව git branchශාඛාව පෙන්වීමට අපොහොසත් විය foo. ඇති ෙහයින්ද git symbolic-ref HEADයෝජනා කරන පරිදි තවත් පිළිතුරු වැඩ කළා.
මාකස් ජූනියස් බ

2
downvote, අපට අවශ්‍ය වන්නේ දැනට පවතින ශාඛාව stdout ලෙස මිස සියලුම ශාඛා නොවේ
ඇලෙක්සැන්ඩර් මිල්ස්

4667

ලැයිස්තුගත කර ඇති අනෙක් ශාඛා නොමැතිව ඔබ දැනට සිටින ශාඛාව ප්‍රදර්ශනය කිරීම සඳහා ඔබට පහත සඳහන් දෑ කළ හැකිය:

git rev-parse --abbrev-ref HEAD

යොමුව:


132
H ක්‍රිස්නෙල්සන්, මන්ද එය ප්‍රදර්ශනය කරන්නේ සියලුම ශාඛා වල දිගු ලැයිස්තුවකට වඩා වත්මන් ශාඛාව පමණි.
avakar

73
හොඳ එකක්, කනගාටුවට කරුණක් නම් ඔබ 'වෙන්වූ හෙඩ්' තත්වයේ සිටී නම් එය ක්‍රියා නොකරයි (එය 'හෙඩ්' ප්‍රතිදානය කරයි, එය මුළුමනින්ම නිෂ් less ල ය).
කාලෝස් කැම්ප්ඩෙරස්

34
මම හිතන්නේ ඔබ 'වෙන්වූ හෙඩ්' තත්වයක සිටී නම් එය අයත් ශාඛාව පිළිබඳ කිසිදු සොයා git branch* (no branch)
බැලීමක්

76
"git symbolic-ref --short HEAD" ද මෙම කාර්යය සඳහාම ක්‍රියාත්මක වේ
dusktreader

22
git rev-parse --abbrev-ref HEAD 2>/dev/null ඔබ තවමත් හෙඩ් නොමැති නව ගබඩාවක් නිර්මාණය කළහොත් / dev / null කොටස මඟින් දෝෂයක් දැකීමෙන් වළක්වයි.
Paradiesstaub

526

git symbolic-ref HEADසම්පූර්ණ refspec පෙන්වන ද ඔබ සතුව ඇත .

Git v1.8 සහ පසුව ශාඛා නාමය පමණක් පෙන්වීමට (එය පෙන්වා දුන් ග්‍රෙග්ට ස්තූතියි):

git symbolic-ref --short HEAD

Git v1.7 + මත ඔබටද කළ හැකිය:

git rev-parse --abbrev-ref HEAD

ඔබ ශාඛාවක සිටී නම් දෙදෙනාම එකම ශාඛා නාමයක් ලබා දිය යුතුය. ඔබ වෙන්වූ හිසක සිටී නම් පිළිතුරු වෙනස් වේ.

සටහන:

කලින් සේවාදායකයෙකු මත, මෙය ක්‍රියාත්මක වන බව පෙනේ:

git symbolic-ref HEAD | sed -e "s/^refs\/heads\///"

- ඩැරියන් 26. මාර්තු 2014


7
අනෙක් සියලුම පිළිතුරු ලෙස, ඔබ 'වෙන්වූ
හෙඩ්

51
@ කාලෝස් කැම්පර්ඩ්‍රස්: ඔබ වෙන්වූ හෙඩ් තත්වයේ සිටී නම්, වර්තමාන ශාඛාවක් වැනි දෙයක් නොමැත. සියල්ලට පසු, ඔබ බැඳී සිටින කැපවීම ශුන්‍ය, ශාඛා එකක් හෝ වැඩි ගණනකට ළඟා විය හැකිය.
Flimm

2
HEAD නොමැති විට මෙය හිස් git ගබඩාවල ගැටළු ඇති කරයි
Arne

8
Git අනුවාදය සමඟ 2.4.4 ඔබ වෙන්ව සිටින විට git rev-parse --abbrev-ref HEADපෙන්වයි HEAD.
පීටර්හිල්

හොඳම පිළිතුර තවමත් පවතින්නේ git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" එය HEAD detached at a63917fවෙන්වූ තත්වයක සිටින විට වැනි නූලක් පෙන්වන නිසාය. අනෙක් පිළිතුරු මෙන් නොව කිසිවක් හෝ හෙඩ් නොපෙන්වයි. මෙය වැදගත්.
බර්නාඩ්

271

මගේම සඳහනක් සඳහා (නමුත් එය අනෙක් අයට ප්‍රයෝජනවත් විය හැකිය) මම මෙම ත්‍රෙඩ් එකේ සඳහන් බොහෝ (මූලික විධාන රේඛා) ශිල්පීය ක්‍රම පිළිබඳ දළ විශ්ලේෂණයක් කළෙමි, ඒවා සෑම එකක්ම භාවිත අවස්ථා කිහිපයකට අදාළ වේ: HEAD යනු (පෙන්වා දෙමින්):

  • ප්‍රාදේශීය ශාඛාව (මාස්ටර්)
  • දුරස්ථ ෙසොයා ගැනීෙම් ශාඛාව, ෙද්ශීය ශාඛාව සමඟ සමපාත ෙව් (මූලාරම්භය / ස්වාමියා ස්වාමියාට සමාන කැපවීමකින්)
  • දුරස්ථ ෙසොයා ගැනීෙම් ශාඛාව, ෙද්ශීය ශාඛාවක් සමඟ සමපාත ෙනොෙව් (සම්භවය / අංග-ෆූ)
  • ටැගය (v1.2.3)
  • subodule (උප මොඩියුල නාමාවලිය තුළ ධාවනය කරන්න)
  • සාමාන්‍ය වෙන්වූ හිස (ඉහත කිසිවක් නොවේ)

ප්රතිපල:

  • git branch | sed -n '/\* /s///p'
    • දේශීය ශාඛාව: master
    • දුරස්ථ ෙසොයා ගැනීෙම් ශාඛාව (සමමුහුර්තව): (detached from origin/master)
    • දුරස්ථ ෙසොයා ගැනීෙම් ශාඛාව (සමමුහුර්තව ෙනොමැත): (detached from origin/feature-foo)
    • ටැගය: (detached from v1.2.3)
    • උප මොඩියුලය: (HEAD detached at 285f294)
    • සාමාන්‍ය වෙන්වූ හිස: (detached from 285f294)
  • git status | head -1
    • දේශීය ශාඛාව: # On branch master
    • දුරස්ථ ෙසොයා ගැනීෙම් ශාඛාව (සමමුහුර්තව): # HEAD detached at origin/master
    • දුරස්ථ ෙසොයා ගැනීෙම් ශාඛාව (සමමුහුර්තව ෙනොමැත): # HEAD detached at origin/feature-foo
    • ටැගය: # HEAD detached at v1.2.3
    • උප මොඩියුලය: # HEAD detached at 285f294
    • සාමාන්‍ය වෙන්වූ හිස: # HEAD detached at 285f294
  • git describe --all
    • දේශීය ශාඛාව: heads/master
    • දුරස්ථ ෙසොයා ගැනීෙම් ශාඛාව (සමමුහුර්තව): heads/master(සටහන: නැත remotes/origin/master )
    • දුරස්ථ ෙසොයා ගැනීෙම් ශාඛාව (සමමුහුර්තව ෙනොමැත): remotes/origin/feature-foo
    • ටැගය: v1.2.3
    • උප මොඩියුලය: remotes/origin/HEAD
    • සාමාන්‍ය වෙන්වූ හිස: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • දේශීය ශාඛාව: ref: refs/heads/master
    • උප මොඩියුලය: cat: .git/HEAD: Not a directory
    • අනෙකුත් සියලුම භාවිත අවස්ථා: අනුරූප බැඳීමේ SHA
  • git rev-parse --abbrev-ref HEAD
    • දේශීය ශාඛාව: master
    • අනෙක් සියලුම භාවිත අවස්ථා: HEAD
  • git symbolic-ref --short HEAD
    • දේශීය ශාඛාව: master
    • අනෙක් සියලුම භාවිත අවස්ථා: fatal: ref HEAD is not a symbolic ref

(FYI මෙය සිදු කළේ git අනුවාදය 1.8.3.1 සමඟිනි)


6
සාරාංශයක් ලෙස, කිසිවෙකු මා අතින් කරන දේ කරන බවක් නොපෙනේ.
bukzor

6
මෙය මට බෙහෙවින් ප්‍රයෝජනවත් විය: මට git describe --all --exact-match 2>/dev/null | sed 's=.*/=='හොඳම විසඳුම විය (ටැග් සහ ශාඛා ප්‍රධානීන් සඳහා හොඳ නම්, අහඹු ලෙස වෙන් වූ හිස් සඳහා ප්‍රතිදානයක් නැත.
ඇලෙක්ස් ඩුපූ

1
කෙසේ වෙතත්, git describeඑකම කැපවීම ගැන සඳහන් කරන ශාඛා කිහිපයක් ඇති විට භාවිතා කිරීම බරපතල ලෙස අසමත් වන බව මම සොයා ගතිමි , උදා: වහාම git checkout -b foo- එය ඒවායින් එකක් අත්තනෝමතික ලෙස භාවිතා කරයි (සමහර විට මෑතකදී නිර්මාණය කරන ලද එකක් මෙන් පෙනේ). පෙරහන් කළ ප්‍රතිදානය භාවිතා කිරීමට මම මගේ උපාය වෙනස් කර ප්‍රති result ලය වෙන්වූ හිසක් ගැන යමක් නම් git branchපමණක් භාවිතා කරමි git describe.
ඇලෙක්ස් ඩුපුයි

ඇත්ත වශයෙන්ම, git branch --no-colorගොනු නාමය කරදරකාරී පර්යන්ත ගැලවීමේ කේත වලින් තොර බවට වග බලා ගැනීමට මට භාවිතා කළ යුතුය.
ඇලෙක්ස් ඩුපුයි

2
මෙය මට කිහිප වතාවක්ම ඇත්තෙන්ම ප්‍රයෝජනවත් වී ඇත.
ඇලිස් පර්සෙල්

164

Git හි 2.22 අනුවාදය අනුව ඔබට භාවිතා කළ හැක්කේ:

git branch --show-current

මිනිසාගේ පිටුවට අනුව:

වත්මන් ශාඛාවේ නම මුද්‍රණය කරන්න. වෙන් කළ HEAD තත්වයේදී කිසිවක් මුද්‍රණය නොකෙරේ.


2
ඔව්, මම පසුගිය මාර්තු මාසයේ එම පිටුවේ අදහස් දැක්වීමේදී සඳහන් කළෙමි: stackoverflow.com/questions/6245570/… . සහ stackoverflow.com/a/55088865/6309 හි .
VonC

5
අවම වශයෙන් මෙම නැත සඳහන් නොවන වෙන් ශීර්ෂය කවෙර්ද යන්න එතුමා සඳහන් වැඩ. කිසිවක් සඳහා සම්පාදනය කිරීම සඳහා
ගිට්

136

තවත් එක් විකල්පයක්:

git name-rev --name-only HEAD

එය ද ලබා ගත හැකියecho ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
ඇන්ටොයින්

12
ප්‍රධාන හා විශේෂාංග ශාඛාව සඳහා HEAD එක සමාන නම් එය ක්‍රියා නොකරයි (උදා: ඒකාබද්ධ කිරීමේදී). විශේෂාංග ශාඛාව මත ක්‍රියාත්මක කළද එය 'මාස්ටර්' ලබා දෙයි.
ඔරෙස්ට් හේරා

1
git checkout master && git name-rev --name-only HEAD # ac-187එය අපේක්ෂා කළ පරිදි ක්‍රියාත්මක නොවේ
ඇලෙක්සැන්ඩර් අබාෂ්කින්

ඒකාබද්ධ කිරීමට මොහොතකට පෙර මම මෙය විචල්‍යයක් ලෙස සුරකින අතර සමහර අවස්ථාවලදී මම යම් කැපවීමක් කළහොත් මගේ හෙඩ් ක්‍රියා විරහිත වේ. මෙම අවස්ථාවේ දී මෙය හොඳින් ක්රියා කරයි.
ඉෂාන් සෙජ්වාල්

4
මම මෙය කරන්නේ ජෙන්කින්ස් නල මාර්ගයෙන්. එබැවින් මෙය දැනට මට හොඳම පිළිතුර ලෙස පෙනේ. කිරීම git branch --listනිකම්ම කියනවා * (HEAD detached at 7127db5). කිරීම git rev-parse --abbrev-ref HEADනිකම්ම කියනවා HEADසහ එසේ ය.
මිග් 82

91

ඉතා සරල, මම එය එක් ලයිනර් එකක (බාෂ්) ලබා ගත්තා

git branch | sed -n '/\* /s///p'

(ණය: සීමිත පව් කමාව)

මම එහි සිටින විට, දුරස්ථ ෙසොයා ගැනීෙම් ශාඛාව ලබා ගැනීමට එක් ලයිනර් (ඇත්නම්)

git rev-parse --symbolic-full-name --abbrev-ref @{u}

8
කප්පාදුව වැඩියි! :) sed -n 's/\* //p'උපක්‍රමය කරයි. මම ව්‍යාකූලත්වයට නැඹුරු වුවද මම එය නැංගුරම් දමමි sed -n 's/^\* //p'.
මාර්ක් රීඩ්

65

ඔබට ගබඩාවේ නාමාවලියෙහි ලිනක්ස් හි විධාන රේඛාව (කොන්සෝලය) ටයිප් කළ හැකිය:

$ git status

ඔබට යම් පෙළක් පෙනෙනු ඇත, ඒ හා සමාන දෙයක්:

...
On branch master
...

ඒ කියන්නේ ඔබ දැනට masterශාඛාවේ සිටින බව. ඔබ ඒ මොහොතේ කිසියම් ගොනුවක් සංස්කරණය කරන්නේ නම් සහ එය එකම දේශීය ගබඩාවක පිහිටා තිබේ නම් (Git අනුවාද පාලන කළමනාකරණය යටතේ ඇති ලිපිගොනු අඩංගු දේශීය නාමාවලිය), ඔබ මෙම ශාඛාවේ ගොනුව සංස්කරණය කරමින් සිටී.


2
ඔබට කරන්න ඕන දේ මත පදනම්ව, ඔබ භාවිතා කළ හැකිය git statusසමග නිමැවුම් පළමු පෙළ පමණක් ලබා git status | head -1වගේ දෙයක් හික්මුණු වන # On branch master. අනුවාද වෙනස්කම් ද ගණනය කිරීම අවශ්‍ය බව මට විශ්වාසයි.
ජෝෂුවා පින්ටර්

Os ජොෂ්පින්ටර්: ඔබටත් භාවිතා කළ හැකිය git status | grep 'On branch', එය එකම බලපෑමක් ඇති කළ යුතුය (තිබිය යුතුය, ඔබේ Git අනුවාදය එය වෙනස් ආකාරයකින් පෙන්වන්නේ නම් එයින් අදහස් නොකෙරේ). නැතහොත් git branch | grep '*', එය ආරම්භයේ දී තාරකාවක් සහිත ශාඛාවේ නම පෙන්වනු ඇත.
ටැඩෙක්

ඔව්, එය එසේම ක්‍රියාත්මක වන අතර වඩාත් නම්‍යශීලී විය හැකිය. දේව් රේල්ස් යෙදුමක ශාඛා නම පමණක් පෙන්වීම සඳහා මගේ අවසාන ප්‍රති result ලය වූයේ:<tick>git status | head -1<tick>.gsub('# On branch ', '')
ජෝෂුවා පින්ටර්

1
git statusලිපිගොනු විශාල ප්‍රමාණයක් කළමනාකරණය කරන්නේ නම් වටිනාකමක් ලබා දීමට බොහෝ කාලයක් ගතවනු ඇත.
ටින් මෑන්

ඔව්, ඔබට වෙබ් පිටුවක ශාඛාව මුද්‍රණය කිරීමට අවශ්‍ය නම්, උදාහරණයක් ලෙස, git statusමුළු පිටුවේම පරම්පරාවේ කාලය ටැංකි කළ හැකිය.
ආටෙම් රුසකොව්ස්කි

37
git symbolic-ref -q --short HEAD

වර්තමාන ශාඛා නාමය අවශ්‍ය ස්ක්‍රිප්ට් වල මම මෙය භාවිතා කරමි. එය ඔබගේ වර්තමාන ශාඛා නාමය වන HEAD සඳහා වර්තමාන කෙටි සංකේතාත්මක සඳහන පෙන්වනු ඇත.


1
ස්තූතියි, විශිෂ්ටයි! - මම මේ සමඟ මගේ ස්ක්‍රිප්ටයේ "-C path_to_folder" ද එක් කරමි.
ටෝනි

1
මෙය කදිම විසඳුමකි, මන්ද -q විකල්පය සමඟ එය "වෙන්වූ හෙඩ්" තත්වයේ දෝෂ කේතයක් ලබා දෙන නමුත් stderr වෙත කිසිවක් මුද්‍රණය නොකරයි.
හැලිඩේව්

කිසිදු
කැපවීමකින්

26
git branch | grep -e "^*" | cut -d' ' -f 2

ශාඛා නාමය පමණක් පෙන්වනු ඇත


ඔබේ ශාඛාව මේ හා සමාන දෙයක් පෙන්වන්නේ නම් "* (SUM_BRANCH_01 හි HEAD වෙන් කර ඇත)", එවිට මෙම "git branch | grep -e" ^ * "| cut -d '' -f 5 | cut -d ')' -f 1 "
ඩිලන් කැප්

වර්තමාන ශාඛා නාමය ලබා ගැනීම සඳහා මම මේ හරියටම එකම පිටපතක් නිර්මාණය කළෙමි. මම හිතුවා ඒක වෙනසකට උදව් කරයි කියලා.
tggagne

25

git branch වත්මන් ශාඛා නම පමණක් පෙන්වන්න.

Git ශාඛාව ඔබට සියලුම ශාඛා පෙන්වන අතර වර්තමාන එක තරු ලකුණක් සමඟ ඉස්මතු කරනු ඇත, බොහෝ ශාඛා සමඟ වැඩ කිරීමේදී එය ඉතා කරදරකාරී විය හැකිය.

ඔබ දැනට සිටින ශාඛාව පමණක් පෙන්වීමට, භාවිතා කරන්න:

git rev-parse --abbrev-ref HEAD

මෙය සීඅයි සහ වෙනත් ගොඩ නැගීමේ මෙවලම් සඳහා විශිෂ්ටයි!
phouse512

එය පිටපතක භාවිතා කිරීම සඳහා හොඳම පිළිතුර
බෙන් කෙයිල්

1
Y ඩිලන් නිකල්සන් git branch --containsසමහර විට ශාඛා එකකට වඩා ලැයිස්තුගත කරයි.
ජෝ චාකෝ

22

හොඳ ඔල් අව්ක් භාවිතා කරමින් ඔලිවර් රෙෆලෝගේ දිගට සමාන විධාන රේඛා විසඳුමක් හමු විය :

git branch | awk '/^\*/{print $2}'

awk" {}රීජෙක්ස් වලට ගැලපෙන රේඛා මත දේවල් කරන්න" යනුවෙන් කියවයි . පෙරනිමියෙන් එය හිස් අවකාශයෙන් වෙන් කරන ලද ක්ෂේත්‍ර උපකල්පනය කරයි, එබැවින් ඔබ දෙවැන්න මුද්‍රණය කරයි. ඔබේ ශාඛාව සමඟ ඇති රේඛාවට පමණක් * ඇතැයි උපකල්පනය කළ හැකි නම්, ඔබට drop අතහැර දැමිය හැකිය. අහ්, බාෂ් ගොල්ෆ්!



18

වත්මන් ශාඛාවේ නම ඔබට පවසන git-awareness shell විමසුමක් භාවිතා නොකරන්නේ ඇයි? git statusඑසේම උපකාරී වේ.


කොහොමද git-prompt.sh සිට contrib/අර්ථ දක්වා ඇති පරිදි, එය (GIT අනුවාදය 2.3.0) කරන්නේ __git_ps1සහකාරියක් ක්රියාව:

  1. නම්, පළමුව, විශේෂ අවස්ථාවක් වේ rebase ප්රගතිය අනාවරණය කර ඇත. ප්‍රතිවිකුණුම් ක්‍රියාවලියේදී Git විසින් නම් නොකළ ශාඛාවක් (වෙන් කරන ලද HEAD) පරමාණුක බවට පත් කරයි, මුල් ශාඛාව වෙනත් තැනක සුරකිනු ඇත.

  2. නම් .git/HEADගොනුව (Git පැරණි ඉතිහාසය ඉතා දුර්ලභ නඩුව,) සංකේතාත්මක පුරුකක් වන අතර, එය භාවිතා කරයිgit symbolic-ref HEAD 2>/dev/null

  3. නැතහොත් එය .git/HEADගොනුව කියවයි . ඊළඟ පියවර එහි අන්තර්ගතය මත රඳා පවතී:

    • මෙම ගොනුව නොපවතී නම්, වර්තමාන ශාඛාවක් නොමැත. මෙය සාමාන්‍යයෙන් සිදුවන්නේ නිධිය හිස් නම් ය.

    • එය 'ref: 'උපසර්ගයෙන් ආරම්භ .git/HEADවන්නේ නම්, සමමුහුර්ත (සංකේතාත්මක යොමු කිරීම) වන අතර, අපි සාමාන්‍ය ශාඛාවක සිටිමු. සම්පූර්ණ නම ලබා ගැනීම සඳහා මෙම උපසර්ගය ඉවත් refs/heads/කරන්න , සහ වත්මන් ශාඛාවේ කෙටි නම ලබා ගැනීමට තීරු කරන්න:

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • එය ආරම්භ නොවන්නේ 'ref: 'නම්, එය යම් කැපවීමකට සෘජුවම යොමු කරමින්, හෙඩ් (නිර්නාමික ශාඛාව) වෙන් කරනු ලැබේ. git describe ...වර්තමාන කැපවීම මිනිස් කියවිය හැකි ආකාරයෙන් ලිවීමට භාවිතා කරන්න .

එය උපකාරී වේ යැයි මම බලාපොරොත්තු වෙමි.


3
ඔබ git-awareness shell විමසුමක් සංවර්ධනය කරන්නේ නම්, ඔබ භාවිතා කළ යුතු පිළිතුරු මොනවාද? කැස්බෑවා හැම පැත්තකින්ම.
ත්‍රිත්ව

1
ripripleee: github.com/git/git/blob/master/contrib/completion/git-prompt.sh වෙතින් අදහස් ලබා ගන්න
ජකුබ් නාරබ්ස්කි

4
git describe --contains --all HEADමෙම පිටුවේ වෙනත් තැනක මා නොදකින වාර්තාවක් සඳහා කරන දේ පෙනේ . ඔබ දන්නා බව මට විශ්වාසයි, StackOverflow හි සබැඳි පමණක් පිළිතුරු නිර්දේශ නොකරයි.
ත්‍රිත්ව

2
@tripleee: මම කොහොමද පැහැදිලි කිරීමක් එකතු කර ඇත git-prompt.sh(හෙවත් __git_ps1) එය නැහැ ...
Jakub Narębski

17

Git තත්ත්වය සඳහා අඩු is ෝෂාකාරී අනුවාදයක් උපක්‍රමය කරයි

git status -bsuno

එය මුද්‍රණය කරයි

## branch-name

1
## සංවර්ධනය ... සම්භවය / සංවර්ධනය
කල්පේෂ් සෝනි

16

කණගාටුයි, මෙය තවත් විධාන රේඛා පිළිතුරකි, නමුත් මෙම ප්‍රශ්නය මට හමු වූ විට මා සොයමින් සිටියේ එයයි. මෙම පිළිතුරු බොහෝමයක් ප්‍රයෝජනවත් විය. මගේ විසඳුම පහත දැක්වෙන bash shell ශ්‍රිතයයි:

get_branch () {
    git rev-parse --abbrev-ref HEAD | grep -v HEAD || \
    git describe --exact-match HEAD 2> /dev/null || \
    git rev-parse HEAD
}

මෙය සෑම විටම මට තර්කයක් ලෙස මිනිස් කියවිය හැකි සහ කෙලින්ම භාවිතා කළ හැකි යමක් ලබා දිය යුතුය git checkout.

  • ප්‍රාදේශීය ශාඛාවක් මත: feature/HS-0001
  • ටැග් කළ බැඳීමක් මත (වෙන්වූ): v3.29.5
  • දුරස්ථ ශාඛාවක (වෙන් කර ඇත, ටැග් කර නැත): SHA1
  • වෙන් කරන ලද වෙනත් ඕනෑම කැපවීමක් මත: SHA1

1
මෙය පළ කිරීම ගැන ස්තූතියි, අනෙක් පිළිතුරු කිසිවක් තර්කයක් ලෙස සැමවිටම භාවිතා කළ හැකි යමක් නිෂ්පාදනය කිරීම ගැන සැලකිලිමත් වන බවක් නොපෙනුණි git checkout.
zwol

15

වැඩ කරන ඩිරෙක්ටරි විධානයෙහි ඔබට git bash භාවිතා කළ හැකිය

git status -b

එය ඔබ කුමන ශාඛාවේ සිටිනවාද යන්න ඔබට කියනු ඇත, ඒවායින් සමහරක් ප්‍රයෝජනවත් වන බොහෝ විධාන තිබේ

-s

--short ප්‍රතිදානය කෙටි ආකෘතියෙන් දෙන්න.

-b --branch ශාඛාව සහ ලුහුබැඳීමේ තොරතුරු කෙටි ආකෘතියකින් පවා පෙන්වන්න.

--porcelain [=] ස්ක්‍රිප්ට් සඳහා ප්‍රතිදානය පහසුවෙන් විග්‍රහ කිරීමට පහසු ආකාරයකින් දෙන්න. මෙය කෙටි නිමැවුමට සමානය, නමුත් පරිශීලක වින්‍යාසය නොසලකා Git අනුවාද හරහා ස්ථාවරව පවතිනු ඇත. විස්තර සඳහා පහත බලන්න.

ආකෘති අනුවාදය නියම කිරීම සඳහා අනුවාද පරාමිතිය භාවිතා කරයි. මෙය අත්‍යවශ්‍ය නොවන අතර මුල් අනුවාදය v1 ආකෘතියට පෙරනිමි වේ.

--long ප්‍රතිදානය දිගු ආකෘතියෙන් දෙන්න. මෙය පෙරනිමියයි.

-v --verbose වෙනස් කර ඇති ලිපිගොනු වල නම් වලට අමතරව, සිදු කිරීමට පෙළඹී ඇති පෙළ වෙනස්වීම් ද පෙන්වන්න (එනම්, git diff --cached ප්‍රතිදානය වැනි). -V දෙවරක් නියම කර ඇත්නම්, තවම වේදිකාගත කර නොමැති වැඩ කරන ගසෙහි වෙනස්කම් ද පෙන්වන්න (එනම්, git වෙනසෙහි ප්‍රතිදානය වැනි).


14
git status 

වෙනස්කම් සමඟ ශාඛාවේ නම ද ලබා දෙනු ඇත.

උදා

>git status
On branch master // <-- branch name here
.....

13

කාලයාගේ ඇවෑමෙන්, අපට ඉතා දිගු ශාඛා ලැයිස්තුවක් තිබිය හැකිය.

තවත් සමහර විසඳුම් විශිෂ්ට වුවත්, මෙන්න මම කරන්නේ (යාකොබ්ගේ පිළිතුරෙන් සරලයි):

git branch | grep \*

දැන්,

git status

ක්‍රියා කරයි, නමුත් දේශීය වෙනස්කම් තිබේ නම් පමණි


13

මෙම විධාන දෙකෙන් එකක් භාවිතා කිරීමට මම නිර්දේශ කරමි.

git branch | grep -e "^*" | cut -d' ' -f 2

හෝ

git status | sed -n 1p | cut -d' ' -f 3

හෝ (වඩාත් වාචික)

git status -uno -bs| cut -d'#' -f 3 | cut -d . -f 1| sed -e 's/^[ \t]//1'| sed -n 1p


12

නෙට්බීන්ස් හි, අනුවාද විවරණ සක්‍රීය කර ඇති බවට සහතික වන්න (බලන්න -> අනුවාද ලේබල් පෙන්වන්න). එවිට ඔබට ව්‍යාපෘති නාමයට යාබදව ශාඛා නාමය දැකිය හැකිය.

http://netbeans.org/bugzilla/show_bug.cgi?id=213582


අනුවාද විවරණ සක්‍රීය කර ඇති විට, ඔබ කළ යුත්තේ වත්මන් ශාඛාව බැලීමට ඔබේ මූසිකය ව්‍යාපෘති (හෝ ගොනුව හෝ ප්‍රියතම) ෆෝල්ඩරය හරහා සඟවන්න.
idclaar

12

මේ ගැන කුමක් කිව හැකිද?

{ git symbolic-ref HEAD 2> /dev/null || git rev-parse --short HEAD 2> /dev/null } | sed "s#refs/heads/##"

1
වඩා හොඳ පිළිතුරක් වන්නේ එය වෙන් කළ හෙඩ් නඩුව හොඳින් හසුරුවන බැවිනි.
පැට්

2
Git විධානයන් එතීමට ඔබ () not using භාවිතා කළ යුතු බවක් පෙනේ
පැට්

At පැට් () කරන පරිදි මේ සඳහා වෙනම උපසිරැසියක් ඇති කිරීමේ අවශ්‍යතාවයක් නොමැත. Add add හොඳයි, ඔබට එකතු කිරීමට අවශ්‍ය නම් හැර; හෝ line ට පෙර නව රේඛාවක්. ඇත්ත වශයෙන්ම, ඔබට විධාන කාණ්ඩගත කිරීමට අවශ්‍ය නොවන්නේ නම්} off සම්පූර්ණයෙන්ම ඉවත් කළ හැකිය.
aij

මෙම නැත symbolic-refකොටසක් ද අවශ්ය --shortසමග branchname උපසර්ගය යෙදීම වැළැක්වීම සඳහා refs/heads/?
rjp

11

වර්තමාන ශාඛා නාමය මුද්‍රණය කරන git-cbr( වර්තමාන ශාඛාව ) නමින් සරල පිටපතක් මා සතුව ඇත .

#!/bin/bash

git branch | grep -e "^*"

මම මෙම ස්ක්‍රිප්ට් එක අභිරුචි ෆෝල්ඩරයකට දැමුවෙමි ( ~/.bin). ෆෝල්ඩරය ඇත $PATH.

දැන් මම git repo එකක සිටින විට, මම git cbrදැනට පවතින ශාඛා නාමය මුද්‍රණය කිරීමට ටයිප් කරන්නෙමි .

$ git cbr
* master

මෙය ක්‍රියාත්මක වන්නේ gitවිධානය එහි පළමු තර්කය ගෙන එහි නමින් පිටපතක් ධාවනය කිරීමට උත්සාහ කරන git-arg1බැවිනි. උදාහරණයක් ලෙස, git branchස්ක්‍රිප්ට් git-branchයනාදිය ධාවනය කිරීමට උත්සාහ කරයි .


11

ඔබේ git-branch නම පෙන්වීම සඳහා ඔබට ස්ථිරවම ඔබේ බාෂ් ප්‍රතිදානය සැකසිය හැකිය. ඔබ විවිධ ශාඛා සමඟ වැඩ කරන විට එය ඉතා පහසුය, $ git statusසෑම විටම ටයිප් කිරීමට අවශ්‍ය නොවේ . Github repo git- awareness -prompt .

ඔබේ පර්යන්තය (ctrl-alt-t) විවෘත කර විධාන ඇතුළත් කරන්න

mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git

ඔබගේ .bashrc sudo nano ~/.bashrcවිධානය සමඟ සංස්කරණය කරන්න (උබුන්ටු සඳහා) පහත සඳහන් දෑ ඉහළට එක් කරන්න:

export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${GITAWAREPROMPT}/main.sh"

ඉන්පසු කේතය අලවන්න

export PS1="\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\] \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ "

එකම ගොනුවේ අවසානයේ ඔබ ස්ථාපන කේතය කලින් අලවා ඇත. මෙය ඔබට වර්ණවත් කළ ප්‍රතිදානය ලබා දෙනු ඇත:රූප විස්තරය මෙහි ඇතුළත් කරන්න


10

පහත දැක්වෙන කවච විධානය මඟින් ඔබ දැනට සිටින ශාඛාව ඔබට කියයි.

git branch | grep ^\*

ඔබට ශාඛාව දැන ගැනීමට අවශ්‍ය සෑම විටම එම දිගු විධානය ටයිප් කිරීමට ඔබට අවශ්‍ය නොවන විට සහ ඔබ Bash භාවිතා කරන විට, විධානයට කෙටි අන්වර්ථයක් ලබා දෙන්න, උදාහරණයක් ලෙස අන්වර්ථය cb, එසේ ය.

alias cb='git branch | grep ^\*'

ඔබ ශාඛා ස්වාමියා හා ඔබේ ඉක්මන් කියන්නේ සිටින විට $, ඔබ ලබා ගන්න වනු ඇත * masterපහත සඳහන් වේ.

$ cb
* master

මෙය ප්‍රශ්නයට පිළිතුරක් සපයන්නේ නැත. කතුවරයකු විවේචනය කිරීමට හෝ පැහැදිලි කිරීමක් ඉල්ලා සිටීමට, ඔවුන්ගේ ලිපියට පහළින් අදහස් දක්වන්න. - සමාලෝචනයෙන්
රශ්වාන් එල්

1
ඇයි ඔබ එහෙම හිතන්නේ?
mrrusof

ඔබ OP සඳහා ඔබේ ලිපිය අදහස් දැක්විය යුතු අතර විස්තර කළ යුතුය, එවිට ඔබේ ලිපිය තේරුම් ගැනීම පහසු වනු ඇත.
රශ්වාන් එල්

1
පරිපූර්ණ හැඟීමක් ඇති කරයි.
mrrusof

1
ඔබ zsh භාවිතා කරන්නේ නම් ඔබට grep regex එක තනි උපුටා දැක්වීම් වලින් ඔතා ගත යුතුය:git branch | grep '^\*'
aaaarrgh

9

වෙන්වූ හිස මත ඇති විට ශාඛා නම හෝ SHA1 ලබා දෙයි:

git rev-parse --abbrev-ref HEAD | grep -v ^HEAD$ || git rev-parse HEAD

මෙය tag dmaestro12 හි පිළිතුරේ කෙටි අනුවාදයක් වන අතර ටැග් සහාය නොමැතිව.


8
වඩා හොඳ:git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
නිල් පාට

8

ඔබට සැබවින්ම අවශ්‍ය නම් අවසාන ශාඛාව / ටැගය වෙන්වූ හෙඩ් තත්වයෙන් පරීක්ෂා කර බලන්න.

git reflog HEAD | grep 'checkout:' | head -1 | rev | cut -d' ' -f1 | rev

යාවත්කාලීන කිරීම ඔබ අවදි වී ඇත්නම් සහ බිය නොවන්නේ නම් මෙය වඩාත් හොඳය.

git reflog HEAD | grep 'checkout:' | head -1 | awk '{print $NF}'

මෙම rev | cut -d' ' -f1| revසරල කළ හැකawk '{print $NF}'
ස්ටීව් Buzonas

1
මෙය මෝඩකමක් නොවන අතර, ඔබට විශේෂිත සංශෝධනයක් හැෂ් මඟින් පරීක්ෂා කර බැලිය හැකි බැවින්, ප්‍රත්‍යාවර්තකය මඟින් පෙන්නුම් කරන්නේ checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9එය තවමත් ප්‍රයෝජනවත් උපක්‍රමයක් බවයි.
ඇලෙක්ස් ඩුපුයි

1
තව දුරටත් කෙටි කරන්නgit reflog | awk '$3=="checkout:" {print $NF; exit}'
jthill

6

මෙය ප්‍රමාද බව මම දනිමි, නමුත් ලිනක්ස් / මැක් මත, ටර්මිනලයේ සිට ඔබට පහත සඳහන් දෑ භාවිතා කළ හැකිය.

git status | sed -n 1p

පැහැදිලි කිරීම:

git status -> වැඩ කරන ගස් තත්ත්වය
sed -n 1p -> තත්ව ශරීරයෙන් පළමු පේළිය ලබා ගනී

ඉහත විධානයට ප්‍රතිචාර දැක්වීම පහත පරිදි වේ:

"On branch your_branch_name"

2
head -1සුපුරුදු ක්‍රමයට
bukzor

5

ඔබට මෙහි පෙනෙන පරිදි GIT_BRANCH විචල්‍යය භාවිතා කළ හැකිය: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

ඔබගේ ස්ක්‍රිප්ට් වල භාවිතා කළ හැකි පරිසර විචල්‍යයන් කිහිපයක් git ප්ලගිනය මඟින් සකසයි:

GIT_COMMIT - ධාරාවේ SHA

GIT_BRANCH - දැනට භාවිතා වන ශාඛාවේ නම, උදා: "ස්වාමියා" හෝ "සම්භවය / foo"

GIT_PREVIOUS_COMMIT - එකම ශාඛාවකින් කලින් ගොඩනඟන ලද SHA (SHA පළමු ශාඛාව ගොඩනැගීමේදී දැනට පවතින SHA)

GIT_URL - නිධිය දුරස්ථ URL

GIT_URL_N - දුරස්ථ 1 ට වඩා ඇති විට නිධිය දුරස්ථ URL, උදා: GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL - කොමිටර් / කර්තෘ විද්‍යුත් තැපෑල

GIT_COMMITTER_EMAIL - කොමිටර් / කර්තෘ ඊමේල්


5

PS1මැක් භාවිතා කිරීමට එය එක් කරන්න :

PS1='\W@\u >`[ -d .git ] && git branch | grep  ^*|cut -d" " -f2`> $ '

ඉහත විධානය ක්‍රියාත්මක කිරීමට පෙර:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

එම විධානය ක්‍රියාත්මක කිරීමෙන් පසු:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

කණගාටු නොවන්න, එය GIT නිධිය නොවේ නම්, එය දෝෂයක් නොපෙන්වන්නේ [-d .git]කුමන .gitෆෝල්ඩරය තිබේද නැද්ද යන්න පරීක්ෂා කරන බැවිනි.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.