Làm thế nào để có được tên chi nhánh hiện tại trong Git?


2594

Tôi đến từ nền Subversion và, khi tôi có một chi nhánh, tôi biết những gì tôi đang làm với "Các tệp làm việc này trỏ đến chi nhánh này".

Nhưng với Git, tôi không chắc chắn khi tôi chỉnh sửa một tệp trong NetBeans hoặc Notepad ++, cho dù đó là liên kết với chủ hay chi nhánh khác.

Không có vấn đề gì với gitbash, nó cho tôi biết tôi đang làm gì.


11
Hãy để IDE của bạn hiển thị tệp .git/HEAD, có thể trong thư mục mẹ
Tino

101
stackoverflow.com/questions/1417957/... $ git rev-phân tích cú pháp --abbrev-ref TRỤ
fantastory



9
Với Git 2.22 (quý 2 năm 2019), bạn sẽ có một cách tiếp cận đơn giản hơn : git branch --show-current. Xem câu trả lời của tôi ở đây .
VonC

Câu trả lời:


2305
git branch

sẽ hiển thị tất cả các chi nhánh địa phương của repo của bạn. Chi nhánh được gắn dấu sao là chi nhánh hiện tại của bạn.

Nếu bạn chỉ muốn truy xuất tên của chi nhánh bạn đang ở, bạn có thể làm:

git rev-parse --abbrev-ref HEAD

Nhưng điều đó không giúp tôi với Notepad ++ và Netbeans. Chỉ cần git bash (và Probobly Vim) và tôi đã đề cập đến điều đó. Tôi đang cố gắng làm việc với các trình soạn thảo văn bản và văn bản khác của Ide mà không có dòng lệnh.
mike628

@ mike628 Thật ra họ đang giúp bạn ngoại trừ bạn muốn thứ gì đó có thể truy cập thông qua GUI. Chính xác?
Tadeck

2
Nếu bạn sẵn sàng làm việc trong Eclipse, có một chương trình gọi là "eGit" có GUI sẽ cho bạn biết chi nhánh hiện tại cho tất cả các repos trong đó. Mặt khác, tôi không biết .. bạn sẽ phải chịu trách nhiệm cho người tạo ra bất kỳ plugin nào bạn muốn sử dụng tương thích với lựa chọn chương trình của bạn (nếu có).
roberttdev

2
Sau khi làm một git checkout --orphan foothì git branchthất bại để hiển thị chi nhánh foo. Trong khi git symbolic-ref HEADnhư đề xuất một câu trả lời khác làm việc.
Marcus Junius Brutus

2
downvote, chúng tôi chỉ muốn chi nhánh hiện tại là thiết bị xuất chuẩn, không phải tất cả các chi nhánh
Alexander Mills

4657

Để hiển thị chi nhánh hiện tại bạn đang ở, mà không có các chi nhánh khác được liệt kê, bạn có thể làm như sau:

git rev-parse --abbrev-ref HEAD

Tài liệu tham khảo:


132
@ChrisNelson, vì nó chỉ hiển thị chi nhánh hiện tại, chứ không phải là một danh sách dài của tất cả các chi nhánh.
avakar

73
Thật tốt, thật đáng buồn là nó không hoạt động nếu bạn ở trạng thái 'Tách rời' (nó chỉ xuất ra 'ĐẦU', hoàn toàn vô dụng).
Carlos Campderrós

34
Tôi đoán bởi những người trong nội bộ git nếu bạn ở trong trạng thái 'Tách rời', không có sự theo dõi của chi nhánh, bởi vì các git branchchương trình * (no branch), cũng vô dụng ...
Carlos Campderrós

76
"git Symbolic-ref --short HEAD" cũng hoạt động cho cùng mục đích này
dusktreader 22/03/13

22
git rev-parse --abbrev-ref HEAD 2>/dev/null Phần / dev / null ngăn bạn gặp lỗi nếu bạn vừa tạo một kho lưu trữ mới chưa có CHÍNH.
Paradiesstaub

523

Bạn cũng git symbolic-ref HEADcó hiển thị đầy đủ refspec.

Để chỉ hiển thị tên chi nhánh trong Git v1.8 trở lên (cảm ơn Greg đã chỉ ra điều đó):

git symbolic-ref --short HEAD

Trên Git v1.7 + bạn cũng có thể làm:

git rev-parse --abbrev-ref HEAD

Cả hai sẽ cung cấp cùng tên chi nhánh nếu bạn ở trên một chi nhánh. Nếu bạn đang ở trên một câu trả lời tách rời khác nhau.

Ghi chú:

Trên một khách hàng trước đó, điều này dường như hoạt động:

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

- Darien 26. Tháng 3 năm 2014


7
Như tất cả các câu trả lời khác, điều này không hiệu quả khi bạn ở trong trạng thái 'Tách rời'
Carlos Campderrós

51
@ CarlosCampderrós: ​​nếu bạn ở trạng thái CHÍNH, thì không có chi nhánh nào như hiện tại. Rốt cuộc, cam kết mà bạn tham gia có thể đạt được bằng 0, một hoặc nhiều nhánh.
Flimm

2
điều này gây ra vấn đề trong kho git trống khi không có Head
Arne

8
Với phiên bản git 2.4.4 git rev-parse --abbrev-ref HEADhiển thị HEADkhi bạn đang ở trên đầu.
peterhil 11/07/2015

Câu trả lời tốt nhất vẫn là git symbolic-ref HEAD | sed -e "s/^refs\/heads\///" vì nó sẽ hiển thị một chuỗi như HEAD detached at a63917fkhi ở trạng thái tách rời, không giống như các câu trả lời khác không hiển thị hoặc không có gì. Điều này quan trọng.
Bernard

265

Để tham khảo cho riêng tôi (nhưng nó có thể hữu ích cho người khác) Tôi đã tổng quan về hầu hết các kỹ thuật (dòng lệnh cơ bản) được đề cập trong luồng này, mỗi kỹ thuật được áp dụng cho một số trường hợp sử dụng: HEAD là (chỉ vào):

  • chi nhánh địa phương
  • nhánh theo dõi từ xa, đồng bộ với nhánh cục bộ (gốc / master cùng cam kết với master)
  • nhánh theo dõi từ xa, không đồng bộ với nhánh cục bộ (origin / Feature-foo)
  • thẻ (v1.2.3)
  • mô hình con (chạy bên trong thư mục mô hình con)
  • đầu tách chung (không có cái nào ở trên)

Các kết quả:

  • git branch | sed -n '/\* /s///p'
    • chi nhánh địa phương: master
    • chi nhánh theo dõi từ xa (đồng bộ hóa): (detached from origin/master)
    • chi nhánh theo dõi từ xa (không đồng bộ): (detached from origin/feature-foo)
    • nhãn: (detached from v1.2.3)
    • mô hình con: (HEAD detached at 285f294)
    • đầu tách chung: (detached from 285f294)
  • git status | head -1
    • chi nhánh địa phương: # On branch master
    • chi nhánh theo dõi từ xa (đồng bộ hóa): # HEAD detached at origin/master
    • chi nhánh theo dõi từ xa (không đồng bộ): # HEAD detached at origin/feature-foo
    • nhãn: # HEAD detached at v1.2.3
    • mô hình con: # HEAD detached at 285f294
    • đầu tách chung: # HEAD detached at 285f294
  • git describe --all
    • chi nhánh địa phương: heads/master
    • chi nhánh theo dõi từ xa (đồng bộ hóa): heads/master(lưu ý: không remotes/origin/master )
    • chi nhánh theo dõi từ xa (không đồng bộ): remotes/origin/feature-foo
    • nhãn: v1.2.3
    • mô hình con: remotes/origin/HEAD
    • đầu tách chung: v1.0.6-5-g2393761
  • cat .git/HEAD:
    • chi nhánh địa phương: ref: refs/heads/master
    • mô hình con: cat: .git/HEAD: Not a directory
    • tất cả các trường hợp sử dụng khác: SHA của cam kết tương ứng
  • git rev-parse --abbrev-ref HEAD
    • chi nhánh địa phương: master
    • Tất cả các trường hợp sử dụng khác: HEAD
  • git symbolic-ref --short HEAD
    • chi nhánh địa phương: master
    • Tất cả các trường hợp sử dụng khác: fatal: ref HEAD is not a symbolic ref

(FYI điều này đã được thực hiện với phiên bản git 1.8.3.1)


6
Tóm lại, dường như không ai làm được những gì tôi sẽ làm bằng tay.
bukzor 4/2/2015

6
Điều này khá hữu ích đối với tôi: git describe --all --exact-match 2>/dev/null | sed 's=.*/=='là giải pháp tốt nhất cho tôi (tên hay cho các thẻ và đầu chi nhánh, không có đầu ra cho các đầu tách rời ngẫu nhiên.
Alex Dupuy

1
Tuy nhiên, tôi chỉ phát hiện ra rằng việc sử dụng git describebị lỗi nghiêm trọng khi có nhiều nhánh tham chiếu cùng một cam kết, ví dụ ngay sau git checkout -b foođó - nó sử dụng một trong số chúng một cách tùy ý (có vẻ như có thể là một nhánh được tạo gần đây nhất). Tôi sẽ thay đổi chiến lược của mình để sử dụng đầu ra được lọc từ git branchvà chỉ sử dụng git describenếu kết quả là một cái gì đó về một cái đầu tách ra.
Alex Dupuy

Trên thực tế, tôi cần sử dụng git branch --no-colorđể đảm bảo rằng tên tệp không có mã thoát thiết bị đầu cuối gây phiền nhiễu.
Alex Dupuy

2
Điều này đã thực sự hữu ích với tôi hơn một lần, cảm ơn vì đã rất kỹ lưỡng!
Alice Purcell

154

Kể từ phiên bản 2.22 của git, bạn chỉ có thể sử dụng:

git branch --show-current

Theo trang nam:

In tên của chi nhánh hiện tại. Ở trạng thái ĐẦU tách ra, không có gì được in.


2
Có, tôi đã đề cập rằng tháng ba vừa qua trong các bình luận của trang đó: stackoverflow.com/questions/6245570/iêu . Và trong stackoverflow.com/a/55088865/6309 .
VonC

5
Ít nhất đề cập đến điều này không hoạt động trong trạng thái ĐẦU tách ra. Chỉ mất vài giờ để git 2.22 được biên dịch mà không có gì ...
David Deprost

136

Một thay thế nữa:

git name-rev --name-only HEAD

nó cũng có thể được lấy vớiecho ${$(git symbolic-ref --quiet HEAD)#refs/heads/}
Antoine

12
Nó không hoạt động nếu HEAD giống nhau cho nhánh chính và nhánh tính năng (ví dụ: trong quá trình hợp nhất). Nó trả về 'master' ngay cả khi được thực thi trên nhánh tính năng.
Orest Hera

1
git checkout master && git name-rev --name-only HEAD # ac-187Nó không hoạt động như mong đợi
Alexander Abashkin

Tôi lưu nó vào một biến ngay trước khi hợp nhất và trong trường hợp ĐẦU của tôi có thể bị hủy nếu tôi kiểm tra một cam kết cụ thể. Trong những trường hợp này hoạt động tốt.
Ishaan Sejwal

4
Tôi đang làm điều này từ một đường ống Jenkins. Vì vậy, điều này dường như là thời gian là câu trả lời tốt nhất cho tôi. Làm git branch --listchỉ nói * (HEAD detached at 7127db5). Làm git rev-parse --abbrev-ref HEADchỉ nói HEADvà như vậy.
Mig82

91

Cũng đủ đơn giản, tôi đã nhận nó trong một lớp lót (bash)

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

(tín dụng: Chuộc tội có giới hạn)

Và trong khi tôi ở đó, một lớp lót để lấy nhánh theo dõi từ xa (nếu có)

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

8
Quá nhiều dấu gạch chéo! :) sed -n 's/\* //p'thực hiện các mẹo. Mặc dù tôi có xu hướng hoang tưởng nên tôi sẽ neo nó lại sed -n 's/^\* //p'.
Mark Reed

65

Bạn chỉ có thể nhập dòng lệnh (bàn điều khiển) trên Linux, trong thư mục kho lưu trữ:

$ git status

và bạn sẽ thấy một số văn bản, trong đó có một cái gì đó tương tự:

...
On branch master
...

có nghĩa là bạn hiện đang ở masterchi nhánh. Nếu bạn đang chỉnh sửa bất kỳ tệp nào tại thời điểm đó và nó nằm trong cùng một kho lưu trữ cục bộ (thư mục cục bộ chứa các tệp nằm trong quản lý kiểm soát phiên bản Git), thì bạn đang chỉnh sửa tệp trong nhánh này.


2
Dựa trên những gì bạn muốn làm, bạn có thể sử dụng git statusvà chỉ nhận được dòng đầu ra đầu tiên git status | head -1mang lại kết quả như thế nào # On branch master. Tôi chắc chắn rằng sự khác biệt phiên bản cũng sẽ được tính đến.
Joshua Pinter

@JoshPinter: Bạn cũng có thể sử dụng git status | grep 'On branch', cái này sẽ có tác dụng tương tự (nên, không có nghĩa là nó sẽ như vậy nếu phiên bản Git của bạn hiển thị khác đi). Hoặc git branch | grep '*', sẽ hiển thị tên của chi nhánh với một ngôi sao ở đầu của nó.
Tadeck

Đúng, nó hoạt động tốt và có thể linh hoạt hơn. Kết quả cuối cùng của tôi khi chỉ hiển thị tên chi nhánh trong ứng dụng dev Rails là:<tick>git status | head -1<tick>.gsub('# On branch ', '')
Joshua Pinter

1
git statuscó thể mất nhiều thời gian để trả về giá trị nếu có nhiều tệp đang được quản lý.
Tin Man

Vâng, nếu bạn muốn in chi nhánh trên một trang web, ví dụ, git statuscó thể chứa toàn bộ thời gian tạo của trang.
Artem Russakovskii

36
git symbolic-ref -q --short HEAD

Tôi sử dụng điều này trong các kịch bản cần tên chi nhánh hiện tại. Nó sẽ hiển thị cho bạn tham chiếu tượng trưng ngắn hiện tại đến HEAD, đây sẽ là tên chi nhánh hiện tại của bạn.


1
Cảm ơn, làm việc tuyệt vời! - Tôi cũng đang thêm "-C path_to_folder" vào tập lệnh của mình bằng cách này.
Tony

1
Đây là một giải pháp tốt vì với tùy chọn -q, nó trả về mã lỗi ở trạng thái "tách rời" nhưng không in bất cứ thứ gì lên stderr.
ảo giác

đây là giải pháp duy nhất hiệu quả với tôi trên một repo mới mà không có bất kỳ cam kết nào
kundasaba

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

sẽ chỉ hiển thị tên chi nhánh


Nếu chi nhánh của bạn hiển thị đôi khi như thế này "* (ĐẦU tách ra tại SUM_BRANCH_01)", thì hãy thử "chi nhánh git | grep -e" ^ * "| cut -d '' -f 5 | cut -d ')' -f 1 "
Dylan Kapp

Tôi chỉ tạo chính xác kịch bản này để có được tên chi nhánh hiện tại. Tôi hình dung nó có thể giúp với diffs.
tggagne

25

git branch chỉ hiển thị tên chi nhánh hiện tại.

Trong khi nhánh git sẽ hiển thị cho bạn tất cả các nhánh và làm nổi bật nhánh hiện tại bằng dấu hoa thị, nó có thể quá cồng kềnh khi làm việc với nhiều nhánh.

Để chỉ hiển thị chi nhánh bạn hiện đang sử dụng, hãy sử dụng:

git rev-parse --abbrev-ref HEAD

điều này thật tuyệt vời cho ci và các công cụ xây dựng khác!
phouse512

câu trả lời hay nhất cho việc sử dụng nó trong kịch bản
Ben Keil

1
@DylanNicholson git branch --containsđôi khi liệt kê nhiều hơn một chi nhánh.
Joe Chacko

22

Tìm thấy một giải pháp dòng lệnh có cùng độ dài với Oliver Refalo , sử dụng ol 'awk tốt:

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

awkđọc là "thực hiện công cụ {}trên các dòng khớp với biểu thức chính quy". Theo mặc định, nó giả sử các trường được phân tách bằng khoảng trắng, do đó bạn in cái thứ hai. Nếu bạn có thể giả sử rằng chỉ dòng có nhánh của bạn có dấu *, bạn có thể bỏ ^. À, bash golf!


19
#!/bin/bash
function git.branch {
  br=`git branch | grep "*"`
  echo ${br/* /}
}
git.branch

18

Tại sao không sử dụng dấu nhắc shell git, nó sẽ cho bạn biết tên của chi nhánh hiện tại? git statuscũng giúp.


Làm thế nào git-prompt.sh từ contrib/đó (git phiên bản 2.3.0), như được định nghĩa trong __git_ps1hàm trợ giúp:

  1. Đầu tiên, có trường hợp đặc biệt nếu phát hiện rebase trong tiến trình. Git sử dụng nhánh không tên (tách rời) trong quá trình rebase để biến nó thành nguyên tử và nhánh ban đầu được lưu ở nơi khác.

  2. Nếu .git/HEADtệp là một liên kết tượng trưng (một trường hợp rất hiếm, từ lịch sử cổ đại của Git), thì nó sử dụnggit symbolic-ref HEAD 2>/dev/null

  3. Khác, nó đọc .git/HEADtập tin. Các bước tiếp theo phụ thuộc vào nội dung của nó:

    • Nếu tập tin này không tồn tại, thì không có chi nhánh hiện tại. Điều này thường xảy ra nếu kho lưu trữ trống.

    • Nếu nó bắt đầu bằng 'ref: 'tiền tố, thì đó .git/HEADlà symref (tham chiếu tượng trưng) và chúng ta ở trên nhánh bình thường. Tách tiền tố này để lấy tên đầy đủ và dải refs/heads/để lấy tên ngắn của chi nhánh hiện tại:

      b="${head#ref: }"
      # ...
      b=${b##refs/heads/}
      
    • Nếu nó không bắt đầu bằng 'ref: ', thì nó bị tách ra (nhánh ẩn danh), trỏ trực tiếp đến một số cam kết. Sử dụng git describe ...để viết cam kết hiện tại ở dạng người có thể đọc được.

Tôi hy vọng điều đó sẽ giúp.


3
Và nếu bạn đang phát triển một dấu nhắc shell nhận biết git, bạn nên sử dụng câu trả lời nào ở đây? Những con rùa đều lặn xuống dưới.
tripleee


4
Mà bản ghi dường như đang làm git describe --contains --all HEADmà tôi hiện không thấy ở nơi nào khác trên trang này. Như tôi chắc chắn bạn biết, câu trả lời chỉ liên kết không được khuyến nghị trên StackOverflow.
tripleee 18/2/2015

2
@tripleee: Tôi đã thêm một lời giải thích làm thế nào git-prompt.sh(aka __git_ps1) làm điều đó ...
Jakub Narębski

17

Một phiên bản ít ồn hơn cho trạng thái git sẽ thực hiện thủ thuật

git status -bsuno

Nó in ra

## branch-name

1
## phát triển ... nguồn gốc / phát triển
Kalpesh Soni

16

Xin lỗi, đây là một câu trả lời dòng lệnh khác, nhưng đó là những gì tôi đang tìm kiếm khi tôi tìm thấy câu hỏi này và nhiều câu trả lời này rất hữu ích. Giải pháp của tôi là hàm bash shell sau:

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

Điều này sẽ luôn luôn cung cấp cho tôi một cái gì đó cả con người có thể đọc và có thể sử dụng trực tiếp như là một đối số git checkout.

  • trên một chi nhánh địa phương: feature/HS-0001
  • trên một cam kết được gắn thẻ (tách ra): v3.29.5
  • trên một nhánh từ xa (tách ra, không được gắn thẻ): SHA1
  • trên bất kỳ cam kết tách rời nào khác: SHA1

1
Cảm ơn bạn đã đăng bài này, không có câu trả lời nào khác có vẻ quan tâm đến việc luôn tạo ra thứ gì đó có thể sử dụng làm đối số git checkout.
zwol

15

bạn có thể sử dụng git bash trên lệnh thư mục làm việc như sau

git status -b

nó sẽ cho bạn biết bạn đang ở chi nhánh nào, có rất nhiều lệnh hữu ích trong số đó

-s

--short Đưa ra đầu ra ở định dạng ngắn.

-b --branch Hiển thị thông tin chi nhánh và theo dõi ngay cả ở định dạng ngắn.

--poriances [=] Cung cấp đầu ra ở định dạng dễ phân tích cú pháp cho các tập lệnh. Điều này tương tự với đầu ra ngắn, nhưng sẽ ổn định trên các phiên bản Git và bất kể cấu hình người dùng. Xem bên dưới để biết chi tiết.

Tham số phiên bản được sử dụng để chỉ định phiên bản định dạng. Đây là tùy chọn và mặc định cho định dạng phiên bản gốc v1.

--long Đưa ra đầu ra ở định dạng dài. Đây là mặc định.

-v --verbose Ngoài tên của các tệp đã được thay đổi, cũng hiển thị các thay đổi văn bản được phân loại theo cam kết (ví dụ như đầu ra của git diff --cached). Nếu -v được chỉ định hai lần, thì cũng hiển thị các thay đổi trong cây làm việc chưa được dàn dựng (nghĩa là, như đầu ra của git diff).


14
git status 

cũng sẽ cung cấp tên chi nhánh cùng với những thay đổi.

ví dụ

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

13

Theo thời gian, chúng ta có thể có một danh sách dài các chi nhánh.

Trong khi một số giải pháp khác là tuyệt vời, đây là những gì tôi làm (đơn giản hóa từ câu trả lời của Jacob):

git branch | grep \*

Hiện nay,

git status

hoạt động, nhưng chỉ khi có bất kỳ thay đổi cục bộ


13

Tôi khuyên bạn nên sử dụng bất kỳ hai lệnh này.

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

HOẶC LÀ

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

HOẶC (dài dòng hơn)

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


12

Trong Netbeans, đảm bảo rằng các chú thích phiên bản được bật (Xem -> Hiển thị nhãn phiên bản). Sau đó, bạn có thể thấy tên chi nhánh bên cạnh tên dự án.

http://netbeans.org/ormszilla/show_orms.cgi?id=213582


Với các chú thích phiên bản được bật, sau đó, tất cả những gì bạn cần làm là di chuột qua thư mục Project (hoặc Tệp hoặc yêu thích) để xem chi nhánh hiện tại.
idclaar

12

Cái này thì sao?

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

1
Câu trả lời tốt hơn nhiều vì nó xử lý tốt trường hợp CHÍNH tách ra.
Pat

2
Có vẻ như bạn nên sử dụng () chứ không phải {} để bọc các lệnh git
Pat

@Pat Không cần phải tạo ra một nhánh con riêng cho việc này, như () sẽ làm. {} là tốt, ngoại trừ bạn cần phải thêm a; hoặc dòng mới trước}. Trên thực tế, bạn chỉ có thể bỏ hoàn toàn {} trừ khi bạn cần nhóm các lệnh.
aij

Không phải symbolic-refphần cũng cần --shorttránh tiền tố tên nhánh với refs/heads/?
rjp

11

Tôi có một đoạn script đơn giản gọi là git-cbr( nhánh hiện tại ) in ra tên nhánh hiện tại.

#!/bin/bash

git branch | grep -e "^*"

Tôi đặt tập lệnh này trong một thư mục tùy chỉnh ( ~/.bin). Các thư mục là trong $PATH.

Vì vậy, bây giờ khi tôi ở trong một repo git, tôi chỉ cần gõ git cbrđể in ra tên chi nhánh hiện tại.

$ git cbr
* master

Điều này hoạt động vì gitlệnh lấy đối số đầu tiên của nó và cố gắng chạy một tập lệnh đi theo tên của git-arg1. Ví dụ, git branchcố gắng chạy một tập lệnh được gọi git-branch, v.v.


11

Bạn có thể thiết lập vĩnh viễn đầu ra bash của mình để hiển thị tên git-nhánh của bạn. Nó rất tiện dụng khi bạn làm việc với các chi nhánh khác nhau, không cần phải gõ $ git statusmọi lúc. Github repo git-nhận biết-nhắc nhở .

Mở terminal của bạn (ctrl-alt-t) và nhập lệnh

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

Chỉnh sửa .bashrc của bạn bằng sudo nano ~/.bashrclệnh (cho Ubuntu) và thêm phần sau vào đầu:

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

Sau đó dán mã

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\]\$ "

ở cuối tập tin tương tự, bạn đã dán mã cài đặt vào trước đó. Điều này sẽ cung cấp cho bạn đầu ra được tô màu:nhập mô tả hình ảnh ở đây


10

Lệnh shell sau đây cho bạn biết chi nhánh mà bạn hiện đang ở.

git branch | grep ^\*

Khi bạn không muốn gõ lệnh dài đó mỗi khi bạn muốn biết nhánh và bạn đang sử dụng Bash, hãy đặt cho lệnh một bí danh ngắn, ví dụ như bí danh cb, như vậy.

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

Khi bạn ở trong nhánh chính và lời nhắc của bạn là $, bạn sẽ nhận được * masternhư sau.

$ cb
* master

Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - Từ xét
Rashwan L

1
Tại sao bạn nghĩ vậy?
mrrusof

bạn nên bình luận và mô tả bài đăng của bạn cho OP, theo cách đó sẽ dễ hiểu bài đăng của bạn hơn.
Rashwan L

1
Làm cho cảm giác hoàn hảo.
mrrusof

1
nếu bạn sử dụng zsh, bạn sẽ cần phải bao gồm biểu thức grep regex trong các dấu ngoặc đơn:git branch | grep '^\*'
aaaarrgh

9

Trả về tên chi nhánh hoặc SHA1 khi ở đầu tách ra:

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

Đây là phiên bản ngắn của câu trả lời của @ dmaestro12 và không có hỗ trợ thẻ.


8
tốt hơn:git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD
xanh lam

8

Nếu bạn thực sự muốn chi nhánh / thẻ cuối cùng được kiểm tra ở trạng thái CHÍNH tách rời.

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

Cập nhật Điều này đẹp hơn nếu bạn có và không sợ awk.

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

những rev | cut -d' ' -f1| revcó thể được đơn giản hóa vớiawk '{print $NF}'
Steve Buzonas

1
Mặc dù điều này cũng không thể đánh lừa được, vì bạn có thể kiểm tra một bản sửa đổi cụ thể bằng hàm băm, do đó, phần giới thiệu chỉ cho thấy checkout: moving from ba7571b7fc5b8f31b8d0625821269afaa655577e to f68be8cf7bea917a5a0562b619e50368de0068a9nó vẫn là một mẹo hữu ích có thể giúp làm rõ một số trường hợp.
Alex Dupuy

1
git reflog | awk '$3=="checkout:" {print $NF; exit}'
Rút

6

Tôi biết điều này là muộn nhưng trên linux / mac, từ thiết bị đầu cuối bạn có thể sử dụng như sau.

git status | sed -n 1p

Giải trình:

trạng thái git -> lấy trạng thái cây làm việc
sed -n 1p -> lấy dòng đầu tiên từ thân trạng thái

Đáp ứng với lệnh trên sẽ như sau:

"On branch your_branch_name"

2
head -1theo cách thông thường
bukzor 4/2/2015

5

bạn cũng có thể sử dụng biến GIT_BRANCH như xuất hiện tại đây: https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

Plugin git thiết lập một số biến môi trường mà bạn có thể sử dụng trong tập lệnh của mình:

GIT_COMMIT - SHA của hiện tại

GIT_BRANCH - Tên của chi nhánh hiện đang được sử dụng, ví dụ: "master" hoặc "origin / foo"

GIT_PREVIOUS_COMMIT - SHA của cam kết được xây dựng trước đó từ cùng một chi nhánh (SHA hiện tại trên bản dựng đầu tiên trong chi nhánh)

GIT_URL - Lưu trữ URL từ xa

GIT_URL_N - Lưu trữ URL từ xa khi có nhiều hơn 1 điều khiển từ xa, ví dụ: GIT_URL_1, GIT_URL_2

GIT_AUTHOR_EMAIL - Email của tác giả / tác giả

GIT_COMMITTER_EMAIL - Email của tác giả / tác giả


5

Thêm nó vào PS1sử dụng Mac:

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

Trước khi chạy lệnh trên:

nhập mô tả hình ảnh ở đây

Sau khi chạy lệnh đó:

nhập mô tả hình ảnh ở đây

Đừng lo lắng, nếu đó không phải là kho GIT, nó sẽ không hiển thị lỗi vì [-d .git]sẽ kiểm tra xem .gitthư mục có tồn tại hay không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.