Câu trả lời:
Bạn có ít nhất 5 cách khác nhau để xem cam kết mà bạn hiện đã kiểm tra vào bản sao làm việc của mình trong một git bisect
phiên ( lưu ý rằng các tùy chọn 1-4 cũng sẽ hoạt động khi bạn không thực hiện chia đôi ):
git show
.git log -1
.git status
.git bisect visualize
.Tôi sẽ giải thích từng tùy chọn chi tiết dưới đây.
Như đã giải thích trong câu trả lời này cho câu hỏi chung về cách xác định cam kết nào bạn hiện đã thanh toán (không chỉ trong thời gian git bisect
), bạn có thể sử dụng git show
với -s
tùy chọn để chặn đầu ra bản vá:
$ git show --oneline -s
a9874fd Merge branch 'epic-feature'
Bạn cũng có thể chỉ cần làm git log -1
để tìm ra cam kết mà bạn hiện đang thực hiện.
$ git log -1 --oneline
c1abcde Add feature-003
Trong phiên bản Git 1.8.3+ (hoặc là phiên bản cũ hơn?), Nếu bạn có cấu hình nhắc nhở Bash để hiển thị nhánh hiện tại bạn đã kiểm tra vào bản sao làm việc của mình, thì nó cũng sẽ hiển thị cho bạn cam kết hiện tại bạn đã kiểm tra ra ngoài trong một phiên chia đôi hoặc khi bạn ở trạng thái "tách rời". Trong ví dụ dưới đây, tôi hiện đã c1abcde
kiểm tra:
# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $
# Prompt at detached HEAD state
user ~ (c1abcde...) $
Cũng như phiên bản Git 1.8.3+ (và có thể sớm hơn, một lần nữa không chắc chắn), việc chạy git status
cũng sẽ cho bạn thấy những cam kết mà bạn đã kiểm tra trong khi chia đôi và khi bạn ở trạng thái CHÍNH:
$ git status
# HEAD detached at c1abcde <== RIGHT HERE
Cuối cùng, trong khi bạn đang thực hiện git bisect
, bạn cũng có thể chỉ cần sử dụng git bisect visualize
hoặc bí danh tích hợp của nó git bisect view
để khởi chạy gitk
, để bạn có thể xem đồ họa mà bạn đang thực hiện, cũng như cam kết bạn đã đánh dấu là xấu và tốt cho đến nay. Tôi khá chắc chắn rằng điều này đã tồn tại trước phiên bản 1.8.3, tôi chỉ không chắc nó được giới thiệu ở phiên bản nào:
git bisect visualize
git bisect view # shorter, means same thing
git status
không hiển thị cho bạn id xác nhận trừ khi bạn ở trạng thái tách rời. mặt khác nó nói "Trên nhánh bất cứ điều gì ". git show
hoạt động mặc dù
Bạn chỉ có thể làm:
git rev-parse HEAD
Để giải thích thêm một chút: git rev-parse
là lệnh cơ bản của git để diễn giải bất kỳ cách kỳ lạ nào mà bạn có thể chỉ định tên của một cam kết và HEAD
là một tham chiếu đến cam kết hoặc chi nhánh hiện tại của bạn. (Trong một git bisect
phiên, nó trỏ trực tiếp vào một cam kết ("tách rời") chứ không phải là một nhánh.)
Ngoài ra (và dễ nhớ hơn) sẽ chỉ cần làm:
git show
... Mặc định hiển thị cam kết đó HEAD
. Đối với một phiên bản ngắn gọn hơn, bạn có thể làm:
$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation
git rev-parse HEAD
không yêu cầu xử lý so với tất cả các giải pháp thay thế rác.
$ git rev-parse ĐẦU 273cf91b4057366a560b9ddcee8fe58d4c21e6cb
Cập nhật:
Ngoài ra (nếu bạn có thẻ):
(Tốt cho việc đặt tên một phiên bản, không tốt cho việc quay lại git.)
$ git mô tả v0.1,49-localhost-ag-1-g273cf91
Hoặc (như Mark đề xuất, liệt kê ở đây cho đầy đủ):
$ git show --oneline -s c0235b7 Autorotate hình ảnh được tải lên dựa trên định hướng EXIF
Nếu bạn muốn trích xuất chỉ là một mảnh đơn giản của thông tin, bạn có thể nhận được rằng việc sử dụng git show
với --format=<string>
tùy chọn ... và yêu cầu nó không cung cấp cho bạn diff với --no-patch
. Điều này có nghĩa là bạn có thể nhận được đầu ra kiểu printf của bất cứ thứ gì bạn muốn, thường có thể là một trường đơn lẻ.
Chẳng hạn, để chỉ lấy hàm băm rút gọn ( %h
) bạn có thể nói:
$ git show --format="%h" --no-patch
4b703eb
Nếu bạn đang tìm cách lưu nó vào một biến môi trường trong bash (một điều có khả năng mọi người muốn làm), bạn có thể sử dụng $()
cú pháp :
$ GIT_COMMIT="$(git show --format="%h" --no-patch)"
$ echo $GIT_COMMIT
4b703eb
Danh sáchgit show --help
đầy đủ những gì bạn có thể làm là trong . Nhưng đây là một danh sách viết tắt của các thuộc tính có thể hữu ích:
%H
cam kết băm%h
viết tắt cam kết băm%T
cây băm%t
băm cây viết tắt%P
cha mẹ băm%p
băm cha mẹ viết tắt%an
tên tác giả%ae
email tác giả%at
ngày tác giả, dấu thời gian UNIX%aI
ngày tác giả, định dạng ISO 8601 nghiêm ngặt%cn
tên người đi làm%ce
email người gửi%ct
ngày bắt đầu, dấu thời gian UNIX%cI
ngày bắt đầu, định dạng ISO 8601 nghiêm ngặt%s
môn học%f
dòng tiêu đề vệ sinh, phù hợp với tên tệp%gD
bộ lọc reflog, ví dụ: refs / stash @ {1}%gd
bộ chọn reflog rút ngắn, ví dụ: stash @ {1}show
không có gì cho chi nhánh .
Sử dụng git show
, cũng hiển thị cho bạn thông báo cam kết và mặc định cho cam kết hiện tại khi không có đối số.
git log -p -S <search>
thực hiện công việc.