2011-02-04 28 views
11

Đối với một trang web, tôi có chủ và dàn dựng, tôi đã làm việc để dàn dựng trong khoảng 10 ngày. Làm cách nào để tôi biết chắc chắn những gì đã thay đổi kể từ lần hợp nhất cuối cùng của tôi hoặc khi hợp nhất đó là? Hầu hết các hợp nhất tôi đã thực hiện kết thúc là FF nên tôi không thể đăng nhập chúng như git merge branch -m 'merging staging' (git báo cáo nó bỏ qua -m). Tôi thường hợp nhất tổng thể thành dàn dựng để thử nghiệm trước khi hợp nhất dàn dựng thành chủ để thử nghiệm và triển khai thêm.Làm cách nào để tìm lần kết hợp cuối cùng trong git?

Tôi có thể gắn thẻ từng từ khóa nhưng tôi lo lắng về sự lộn xộn khi thực hiện điều đó cho việc hợp nhất. Những gì tôi muốn biết là "gần đúng, những gì đã thay đổi kể từ lần hợp nhất cuối cùng của tôi về dàn dựng thành chủ?" Sau đó, tôi có thể chắc chắn rằng tôi đã dành thêm thời gian để điều tra những thay đổi đó trong kỳ thi cuối khoá. Đôi khi các đồng nghiệp thực hiện những thay đổi mà tôi đã không nhận thấy cho đến giai đoạn này.

Tôi cho rằng kể từ khi dàn dựng -> hợp nhất tổng thể rất hiếm, tôi có thể gắn thẻ chúng và sau đó thực hiện "git whatchanged tag" nhưng tôi hy vọng có cách không gắn thẻ để thực hiện. Cảm ơn.

+1

Đó là lý do tại sao tôi luôn tránh hợp nhất nhanh về phía trước ... – CharlesB

+0

@CharlesB: Làm thế nào để tránh chúng? Nếu tôi đang dàn dựng, tôi có nên tránh hợp nhất tổng thể vào nó không, và chỉ hợp nhất dàn dựng vào tổng thể? – Hans

+0

@CharlesB: ah, tôi hiểu, --no-ff? Tôi sẽ phải thử điều đó ... – Hans

Trả lời

12

Hãy thử điều này, nó sẽ chọn chi nhánh cuối cùng nơi cam kết thông báo bắt đầu với "Merge":

git show :/^Merge 

Here 's một trang web với một vài lời khuyên git có thể giúp bạn ra ngoài.

+0

@alex, cảm ơn câu trả lời. Vì một lý do nào đó, nếu tôi đang ở trên một nhánh không phải là master và tôi "merge master" vào nó, nó ghi lại một thông điệp cam kết, nhưng nếu tôi trên master và hợp nhất nhánh đó (ví dụ, dàn dựng), nó không , bởi vì nó nhanh về phía trước. – Hans

+18

Tôi nghĩ những gì bạn thực sự muốn làm là 'git log --merges -n 1'. Có thực sự không đảm bảo rằng một cam kết hợp nhất có một thông điệp cam kết của mẫu này, mặc dù nó là mặc định. – Cascabel

+0

Thật tuyệt vời. Tôi không biết làm thế nào tôi bỏ lỡ điều đó, nhìn quanh hàng giờ, nhưng đó là điều tôi muốn. Ngẫu nhiên, tôi không thể nói, nó cho thấy sự hợp nhất ff? Tôi muốn biết khi nào tôi sáp nhập, vì vậy sử dụng --no-ff trong master có lẽ vẫn còn tốt, phải không? – Hans

1

Hình như đây là lựa chọn tốt nhất của tôi:

tôi sửa ~/.gitconfig, nói thêm:

[branch "master"] 
    mergeoptions = --no-ff 

Sau đó, nếu tôi đang trên tổng thể và tôi hợp nhất trong một chi nhánh, nó cho thấy nó như là hợp nhất đầy đủ. Có đó là một tùy chọn cấu hình cho chỉ là "chủ" cho thấy git tuyệt vời như thế nào, vì vậy tôi vẫn có thể FF sáp nhập trong các chi nhánh, nơi tôi có khả năng có rất nhiều nhánh chủ đề ngắn ngủi, và tôi không phải nhớ để chỉ định --no-ff khi hợp nhất trên trang cái. Đẹp.

tôi sử dụng bí danh này để xem các bản ghi:

k = log --graph --pretty = định dạng: '% CRED% h% Creset -% C (màu vàng)% d% Creset% s% Cgreen (% cr,% cd)% C (màu xanh đậm) <% một>% Creset' --abbrev-cam

> git k (similar to the gui gitk, but stays in the terminal) 

Khi tôi xem nhật ký như vậy, nó vẽ nên một bức tranh đẹp của nhánh. Nếu tôi muốn tìm cái cuối cùng, tôi có thể làm

> git show :/"Merge branch 'staging'" 

Cảm ơn sự giúp đỡ.

EDIT: Như @jefromi lưu ý trong các ý kiến ​​để câu trả lời đầu tiên, đây có lẽ là một kỹ thuật tốt hơn git log --merges -n 1

1

Dường như bạn không thực sự muốn biết những gì đang thay đổi kể từ merge cuối cùng, nhưng Tôi có gì trên chi nhánh dàn dựng chưa có trên chi nhánh chính? (hoặc cách khác). Nếu vậy, hãy xem lệnh git cherry.

Mặc dù tôi phải thú nhận rằng tôi chưa bao giờ sử dụng lệnh này vì định dạng đầu ra, điều này không thực sự hữu ích. Có lẽ có một cách để cấp dữ liệu này cho git log/git show hoặc như vậy.


Sửa: Theo tôi được biết, bạn không cần một thẻ để sử dụng git whatchanged. Hãy thử chỉ đơn giản là git whatchanged master..staging để xem những gì đã thay đổi khi dàn dựng lần cuối từ khi dàn dựng thành chủ.

+0

ŭlo - đó là một điều tốt khác. Đối với câu hỏi này, không cho phép FF hợp nhất trong master và sử dụng định dạng đầu ra log tốt giúp tôi chủ yếu - cũng như 'git show: /" Merge "' trick, nhưng tôi cũng đã sử dụng 'git log master..staging' có vẻ tương tự như 'git whatchanged master..staging' – Hans

4

Một thay thế mà không dựa vào nội dung của thông điệp cam kết:

$ git rev-list --min-parents=2 --max-count=1 HEAD 
9c6e6d6b6b9bd293335700e34e05217ae8e7a7e8 

--min-parents=2 chọn chỉ cam kết mà là sáp nhập, --max-count=1 chỉ thể hiện cam kết đầu tiên khi đi lại trong lịch sử. Nếu cam kết được chỉ định (HEAD) không có bất kỳ cam kết hợp nhất nào trong lịch sử của nó, đầu ra sẽ trống.

0

Tại sao không chỉ đơn giản là phân nhánh nhánh của bạn với chủ? Điều đó sẽ cho bạn thấy sự khác biệt thực sự trong mỗi tệp của bạn và không chỉ những thứ chưa được nhấn mạnh đó. Ngoài ra những điều bạn có thể đã giảm khi sáp nhập từ dàn dựng để làm chủ trong quá khứ.

thử git diff master..staging hoặc git diff master...staging để xem sự khác biệt từ tổ tiên chung của chúng để 'dàn dựng'.

0
git log --merges -n 1 

hoạt động tốt. Từ man git-log:

--merges 
     Print only merge commits. This is exactly the same as --min-parents=2. 

Dưới đây là một ví dụ sử dụng --pretty=format:"%H" để có được chỉ là SHA.

$ git log --pretty=format:"%H" --merges -n 1 
f32e1f13eef7d5843e8063b8709d01af6dcd5dbf 

Tín dụng chuyển đến Jefromi cho số comment on another answer.

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