Tìm xác nhận hiện đang được kiểm tra trong Git


157

Tôi đang ở giữa một git bisectphiên.

Lệnh nào để tìm ra cam kết nào (hàm băm SHA1) tôi hiện đang sử dụng? git statuskhông cung cấp điều này.

Chỉnh sửa: Tôi đoán gọi git logvà nhìn vào mục đầu tiên hoạt động?

Câu trả lời:


173

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 bisectphiê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 ):

  1. git show.
  2. git log -1.
  3. Bash nhắc.
  4. git status.
  5. git bisect visualize.

Tôi sẽ giải thích từng tùy chọn chi tiết dưới đây.

Tùy chọn 1: chương trình git

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 showvới -stùy chọn để chặn đầu ra bản vá:

$ git show --oneline -s
a9874fd Merge branch 'epic-feature'

Tùy chọn 2: nhật ký git -1

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

Tùy chọn 3: Dấu nhắc Bash

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 đã c1abcdekiểm tra:

# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $

# Prompt at detached HEAD state 
user ~ (c1abcde...) $

Tùy chọn 4: trạng thái git

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 statuscũ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

Tùy chọn 5: git bisect visualization

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 visualizehoặ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

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


Khéo léo. Khi tôi hỏi câu hỏi tôi không có trên Git 1.8, và từ đó tôi đã nhận được một dấu nhắc zsh hiển thị hàm băm cam kết, tôi nghĩ rằng nó thậm chí có thể hiển thị một chỉ báo đặc biệt nếu tôi đang chia đôi, nhưng tôi không biết Tôi thực sự đã thực hiện bất kỳ sự chia rẽ nào nữa kể từ khi tôi hỏi câu hỏi này, chủ yếu là git log -p -S <search>thực hiện công việc.
Steven Lu

git statuskhô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 showhoạt động mặc dù
Kip

87

Bạn chỉ có thể làm:

git rev-parse HEAD

Để giải thích thêm một chút: git rev-parselà 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ếtHEADlà 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 bisectphiê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

3
Nếu bạn muốn lấy băm để sử dụng ở nơi khác, git rev-parse HEADkhông yêu cầu xử lý so với tất cả các giải pháp thay thế rác.
Nick T

17
$ 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

7
Bạn đã yêu cầu SHA1, không phải vì một cái gì đó dễ nhớ. ;-)
Alexander Gladysh

Phiên bản này rất hữu ích nếu bạn muốn kiểm tra kịch bản
Daniele Licitra

12

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 showvớ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}

Tất cả các tùy chọn định dạng, nhưng showkhông có gì cho chi nhánh .
bvj

2

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ố.

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.