2013-03-21 30 views
8

Tôi muốn tìm hiểu điều cuối cùng mà tôi đã đẩy, không phải điều cuối cùng tôi cam kết, nhưng đã được đẩy.Git tìm hiểu cam kết cuối cùng tôi đã đẩy

Có lệnh git nào cho điều này không?

Bối cảnh: Tôi muốn dẹp một số cam kết trước khi sáp nhập dev_branch của tôi với một chi nhánh tổng thể nhưng tôi đã nói với bạn không thể rebase bất cứ điều gì đã đẩy (là đúng này?).

Vì vậy, tôi muốn biết cam kết cuối cùng mà tôi không thể bao gồm trong lần rebase này là gì.

Trả lời

24

Nếu bạn có nghĩa là cam kết cuối cùng bạn bị đẩy đến chi nhánh master sau đó, giả sử từ xa của bạn là origin:

git rev-parse origin/master 

này sẽ cho bạn thấy ID của đỉnh của master chi nhánh của gốc origin cam kết, do kho lưu trữ cục bộ của bạn hiện đang nhận thức được. Điều này có thể có nghĩa là cam kết là cam kết của người khác, nếu người khác đã đẩy cam kết sau khi bạn đã thực hiện và bạn có kể từ ngày fetch đã chỉnh sửa nhánh đó.

git show -p origin/master 

Lệnh này sẽ cung cấp cho bạn thông tin về cam kết, bao gồm ID cam kết, tác giả, thông điệp tường trình và khác với (các) cam kết gốc.


Một trong Git yêu thích của tôi lệnh cho làm chính xác những loại kiểm tra:

git log --pretty=oneline --abbrev-commit --graph --decorate --all 

này sẽ hiển thị một biểu đồ ASCII-art đẹp của lịch sử cam kết, và từng cam kết sẽ hiển thị bất kỳ refs đó đang nhắm mục tiêu nó. Bằng cách này, bạn có thể, trong nháy mắt, xem chi nhánh và sáp nhập trong lịch sử và dễ dàng nhìn thấy nơi origin/master là liên quan đến của riêng bạn master.

+0

wow cảm ơn cdhowie rằng lệnh cuối cùng là tuyệt vời, nó thực sự hữu ích! tôi có lẽ nên hỏi này trong một câu hỏi riêng biệt nhưng những gì được coi là tốt hơn -git rebase -i -git merge --squash gì tôi muốn làm, là sáp nhập chi nhánh dev của tôi với thầy, nhưng có 100 của tôi + commmits nén thành nói 4. Không 1, vì có lẽ 4 điểm chính trong lịch sử của nó – chrispepper1989

+2

Nếu bạn đã đẩy nhánh dev của bạn sau đó squashing nó là một ý tưởng tồi, như những người khác sẽ được tự do chi nhánh từ công việc của bạn. Nếu nó công khai, đừng thay đổi nó. Nếu nó không được công khai thì 'git rebase -i' sẽ cho phép bạn chọn các cam kết riêng biệt mà bạn muốn giữ lại trong lịch sử và bạn muốn sử dụng chúng. 'git merge --squash' sẽ chỉ cung cấp cho bạn cơ hội để tạo ra một cam kết, vì vậy cuối cùng nó phụ thuộc vào bao nhiêu đối tượng commit bạn muốn. – cdhowie

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