2011-08-26 33 views
16

Tôi cần phải thực hiện lệnh git revert -m, nhưng tôi không thể tìm thấy bất kỳ tài liệu nào về cách cha mẹ cam kết được đánh số. Tất cả mọi thứ tôi đã nhìn thấy (bao gồm cả các trang trợ giúp cho phân tích cú pháp) chỉ cho tôi biết rằng các bậc cha mẹ được đánh số nhưng không nói cách chúng được đánh số. Ai đó có thể chỉ ra cho tôi nơi mà điều này được xác định và làm thế nào để xác định điều này?Làm cách nào để tìm ra số lượng các phụ huynh cam kết hợp nhất?

Trả lời

17
git show --format="%P" <SHA> 

sẽ cung cấp cho bạn SHA gốc của cam kết đã cho theo thứ tự số. Thông thường, số tiền bạn muốn chỉ định cho git revert sẽ là 1.

Trong trường hợp hầu hết các lần hợp nhất, SHA của chi nhánh đã được kiểm tra sẽ là phụ huynh đầu tiên và SHA của chi nhánh đã được hợp nhất sẽ là lần thứ hai. (Về cơ bản, chi nhánh được kiểm tra luôn là cha mẹ đầu tiên; các cha mẹ khác là các nhánh được chỉ định cho lệnh hợp nhất theo thứ tự của đặc tả của chúng.)

Nếu bạn muốn tìm SHA cho cha mẹ cụ thể, sử dụng toán tử caret:

  • Đầu tiên mẹ: git rev-parse <SHA>^1
  • thứ hai cha mẹ: git rev-parse <SHA>^2

vân vân.

+1

Câu trả lời hay, nhưng mối nguy hiểm nằm trong "hầu hết", không phải tất cả. Tôi có một repo git đã được chuyển đổi từ svn và một số hoạt động 'git-filter-branch' đã được thực hiện trên nó, và bây giờ nó xuất hiện trong một số trường hợp thứ tự là cách khác xung quanh. Xem http: // stackoverflow.com/questions/27704438/find-the-right-parent-of-a-merge-cam kết-in-a-non-interactive-way –

-2

Số cam kết 'thực tế' là giá trị băm SHA1 của nó. Điều này mang đến tính toàn vẹn tuyệt vời cho mục đích xác minh.

Nó cũng có hiệu ứng phụ tốt đẹp mà bạn không/không thể mong đợi nó theo bất kỳ cách nào tuần tự, cũng là thuộc tính tự nhiên của chi nhánh & hợp nhất hệ thống VCS phân phối nhiều người dùng. Có rất nhiều lệnh đi bộ và phương pháp tham chiếu các cam kết, chẳng hạn như HEAD^hoặc HEAD^^.

git help revisons mô tả đầy đủ tất cả các cú pháp khác nhau.

+1

Câu hỏi là về việc đánh số phụ huynh, không phải là các ID cam kết. tức là "Cha mẹ thứ nhất" "Cha mẹ thứ nhất" ('HEAD^1' so với' HEAD^2') – ABMagil

+0

@ABMagil Câu hỏi ban đầu không giải thích rõ ràng về việc đếm trong cú pháp HEAD ^^ ~~, nó vừa nói về việc đánh số cam kết, về mặt kinh điển là sha1. Tôi đã hoàn thành bằng cách nói rằng phong cách HEAD^đã có sẵn - tôi chỉ thất bại trong việc đánh dấu 'git help revisons' như một nguồn. –

5

Thực hiện đăng nhập git hoặc git hiển thị trên cam kết hợp nhất sẽ hiển thị cho bạn danh sách cha mẹ để hợp nhất trong tiêu đề "Hợp nhất:". Điều này liệt kê các bậc cha mẹ của việc hợp nhất theo thứ tự tuần tự từ trái sang phải. Người đầu tiên là phụ huynh đầu tiên, thứ hai là cha mẹ thứ hai vv

Ví dụ trên kho git:

$ git show 0af53e188a3a8915f65c3b3edaeed3e07d8d3802 
commit 0af53e188a3a8915f65c3b3edaeed3e07d8d3802 
Merge: b81b758 8894d53 
Author: Junio C Hamano <[email protected]> 
Date: Thu Aug 11 11:04:28 2011 -0700 

    Merge branch 'cb/partial-commit-relative-pathspec' 

    * cb/partial-commit-relative-pathspec: 
     commit: allow partial commits with relative paths 

b81b758 là phụ huynh đầu tiên, và 8894d53 là cha mẹ thứ hai cho hợp nhất cam kết 0af53e1.

Các cam kết bố mẹ được đánh số theo thứ tự xuất hiện trên dòng lệnh khi các cam kết được thực hiện:

[on branch master] 
$ git merge foo bar baz 

Đó sẽ hợp nhất các chi nhánh foo, quầy bar và baz vào tổng thể và tạo ra một kết hợp mới cam kết nếu không thể chuyển tiếp nhanh.

Trong kết quả hợp nhất, commit "master" sẽ là cha mẹ đầu tiên, "foo" 2nd, "bar" 3rd và "baz" thứ 4.

Các vấn đề liên quan