2010-07-30 40 views
5

Tôi có tệp văn bản (.yml) mà tôi nhập một số văn bản vào việc sử dụng hệ thống của mình. Nhưng bây giờ chúng ta cần phải biết những gì dòng mới cùng một lúc. Tôi nghĩ sử dụng git để giải quyết vấn đề của chúng tôi, nhưng tôi không thể tìm thấy một lệnh làm rõ để làm điều này.Sử dụng git diff trong cùng một tệp giữa cam kết đầu tiên và lần cuối

Điều này có khả thi không?

+0

có thể trùng lặp của [Git: cách phân biệt cùng một tệp giữa hai cam kết khác nhau trên cùng một chi nhánh?] (Http://stackoverflow.com/questions/3338126/git -hoạt-to-diff-the-same-file-between-hai-khác-cam kết-on-the-cùng-chi nhánh) –

Trả lời

11

Bạn có thể nhận được một danh sách các cam kết withs một cái gì đó giống như vậy:

git log --abbrev-commit --pretty=oneline

Mà nên một cái gì đó như thế này:

commitD Description 
commitC Description 
commitB Description 
commitA Description 

Chọn hai cam kết của bạn và thay thế chúng dưới đây:

git diff <commitA>..<commitB> -- /path/to/file

+0

giải quyết vấn đề của tôi, thnx! –

3

Bạn có thể làm điều đó với một dòng lệnh:

git diff -w `git rev-list HEAD --reverse | head -1`..HEAD -- <path/file> 

Nó không làm việc sử dụng --reverse với một số trong tổng số 1 (-1/max-count 1) ... vì nó đảo ngược danh sách kết quả sau khi cắt nó. Vì vậy, hoặc là bạn sử dụng - ngược lại với lệnh head hoặc bạn sử dụng đuôi -1.

Tôi phải thêm -w cho mục đích sử dụng của mình vì các công tắc ở đầu cuối dòng và sử dụng tab so với không gian.

Điều này có thể không hoạt động như mong đợi nếu tệp không được thêm vào lần commit đầu tiên! Bạn có thể thay đổi dòng trên thành:

git diff -w `git rev-list HEAD --reverse -- <path/file> | head -1`..HEAD -- <path/file> 
Các vấn đề liên quan