2009-09-01 28 views
78

Sau khi kéo Git, đầu ra của nó cho biết tóm tắt về số lượng thay đổi.Thay đổi chi tiết sau khi kéo Git

Tôi làm cách nào để xem từng thay đổi chi tiết của từng tệp?

Được rồi, đây là câu hỏi của tôi để Jefromi:

  1. Làm sao tôi biết nếu tôi được kéo để làm chủ? Tất cả những gì tôi làm là "git pull".

  2. Điểm chính là gì và sự khác biệt giữa chủ và HEAD, hai đầu Git mặc định là gì?

  3. Làm cách nào để xem thay đổi chi tiết trong một tệp cụ thể?

  4. Làm cách nào để tôi thấy thay đổi trong kết quả tóm tắt sau lần nữa là git pull?

  5. Sự khác nhau giữa git diffgit whatchanged là gì?

+3

Được rồi, đây lặp đi lặp lại thêm câu hỏi mới qua chỉnh sửa là không chính xác cách hệ thống được thiết kế để được sử dụng. Bạn cũng có thể trả lời rất nhiều câu hỏi của bạn bằng cách xem các trang của người đàn ông hoặc chỉ bằng cách thử mọi thứ. Ví dụ, 'git diff' rõ ràng xuất ra một khác biệt, trong khi' git whatchanged' rõ ràng xuất ra một danh sách thông tin cam kết, mỗi thông tin chứa danh sách các tệp đã thay đổi. – Cascabel

+0

Có thể do đại diện thấp của bạn. –

+0

@ T.E.D. Nó chỉ mất 50 đại diện để lại ý kiến, và 15 để upvote. – Cascabel

Trả lời

128

Giả sử bạn đang kéo để làm chủ. Bạn có thể tham khảo các vị trí trước đây của master bởi [email protected]{1} (hoặc thậm chí [email protected]{10.minutes.ago}, xem các phiên bản nêu rõ phần của git-rev-parse man page), vì vậy mà bạn có thể làm những việc như

  • Xem tất cả các thay đổi: git diff [email protected]{1} master

  • Xem những thay đổi vào một tập tin đưa ra: git diff [email protected]{1} master <file>

  • Xem tất cả các thay đổi trong một thư mục nhất định: git diff [email protected]{1} master <dir>

  • Xem tóm tắt các thay đổi một lần nữa: git diff --stat [email protected]{1} master

Đối với câu hỏi của bạn "làm thế nào để tôi biết nếu tôi về thầy" ... tốt, sử dụng các chi nhánh là một phần quan trọng của công việc này Git . Bạn nên luôn luôn biết bạn đang ở nhánh nào - nếu bạn kéo các thay đổi, bạn muốn kéo chúng đến nhánh bên phải! Bạn có thể xem danh sách tất cả các nhánh, với dấu hoa thị bằng dấu hoa thị hiện đang được kiểm tra, với lệnh git branch. Tên nhánh hiện tại cũng được in cùng với đầu ra của git status. Tôi khuyên bạn nên lướt qua các trang hướng dẫn sử dụng của người đàn ông - đó là một cách tuyệt vời để từ từ thu thập một số kiến ​​thức.

Và câu hỏi cuối cùng của bạn: HEAD là tên cho chi nhánh hiện đã được kiểm tra. Bạn thực sự có thể sử dụng HEAD[email protected]{1} trong ngữ cảnh này, nhưng nó mạnh hơn một chút để sử dụng các nhánh, vì nếu bạn đi và kiểm tra một chi nhánh khác. HEAD hiện là nhánh thứ hai và [email protected]{1} hiện là master - không phải thứ bạn muốn!

Để tiết kiệm phải hỏi rất nhiều câu hỏi nhỏ như thế này, có lẽ bạn nên xem hướng dẫn Git.Có một triệu trên web, ví dụ:

+4

điều này là tốt hơn so với giải pháp của tôi :) –

+1

Git có thể làm điều đó ?! – Septagram

+1

Tôi biết điều này là cũ, nhưng ... Nó phải là cách khác xung quanh: 'git diff master @ {1} master', nếu không thay đổi được hiển thị" ngược ", tức là chèn sẽ bị xóa vv – ultracrepidarian

34

Giả sử bạn làm một git pull như thế này:

$ git pull 
remote: Counting objects: 10, done. 
remote: Compressing objects: 100% (6/6), done. 
remote: Total 6 (delta 4), reused 0 (delta 0) 
Unpacking objects: 100% (6/6), done. 
From [email protected]:reponame 
    a407564..9f52bed branchname -> origin/branchname 
Updating a407564..9f52bed 
Fast forward 
.../folder/filename   | 209 ++++++++----- 
.../folder2/filename2  | 120 +++++++++++--------- 
2 files changed, 210 insertions(+), 119 deletions(-) 

Bạn có thể thấy sự khác biệt về những gì đã thay đổi bằng cách sử dụng số sửa đổi:

$ git diff a407564..9f52bed 
+4

Và bạn có thể nhận được bản tóm tắt bằng cách sử dụng "git diff --stat a407564..9f52bed'" hoặc chỉ là một bản tóm tắt "' git diff --summary a407564..9f52bed' " –

+13

Đối với phiên bản mới hơn của git, git pull không còn xuất ra danh sách các tập tin đã được thay đổi. Để có được điều đó, bạn cần phải thực hiện 'git pull --stat ' – user10

2

loại của cách này hacky, nhưng nó sẽ cho phép bạn sử dụng các công cụ đồ họa như gitk hoặc gitg hoặc git-gui:

git pull 
git reset [email protected]{1} 
gitg (or gitk or whatever tool you like) 

Câu trả lời với hầu hết các upvotes cho cách tốt nhất bằng cách sử dụng git công cụ, nhưng tôi sử dụng phương pháp này vì tôi có thể sử dụng các công cụ với GUI để xem các thay đổi: P

Sau đó tôi có bước bổ sung để thực hiện git checkout . và sau đó thực hiện lại git pull tại tôi đúng cách kéo và hợp nhất, nhưng tôi đánh giá khả năng kiểm tra sự khác biệt trong một GUI đủ để đối phó với hai bước thêm.

5

1. Làm cách nào để biết liệu tôi có đang kéo để làm chủ không? Tất cả những gì tôi làm là "git pull".

Lệnh bản thân công trình như thế này:

git pull [options] [<repository> [<refspec>…]] 

và mỗi mặc định đề cập đến chi nhánh hiện hành. Bạn có thể kiểm tra chi nhánh của bạn bằng cách sử dụng

git branch -a 

này sẽ liệt kê các chi nhánh địa phương và từ xa của bạn như thế nào cho ví dụ như vậy (Thêm một --- như chia giữa địa phương và từ xa để làm cho nó rõ ràng hơn)

*master 
foo 
bar 
baz 
--- 
origin/HEAD -> origin/master 
origin/deploy 
origin/foo 
origin/master 
origin/bar 
remote2/foo 
remote2/baz 

Khi sau đó bạn hãy nhìn vào một repo từ xa, bạn sẽ thấy những gì bạn đang đề cập đến:

git remote show origin 

sẽ liệt kê như sau:

* remote origin 
    Fetch URL: ssh://[email protected]:12345/username/somerepo.git 
    Push URL: ssh://[email protected]:12345/username/somerepo.git 
    HEAD branch: master 
    Remote branches: 
    foo tracked 
    master tracked 
    Local refs configured for 'git push': 
    foo pushes to foo (up to date) 
    master pushes to master (fast-forwardable) 

Vì vậy, thật dễ dàng để đảm bảo nơi cần kéo và đẩy tới.

3. cách xem thay đổi chi tiết trong một tệp cụ thể?

4. cách xem thay đổi trong kết quả tóm tắt bằng lần git kéo lần nữa?

Các dễ nhất và thanh lịch nhất cách (IMO) là:

git diff --stat [email protected]{1}..master --dirstat=cumulative,files 

này sẽ cung cấp cho bạn hai khối thông tin về những thay đổi ở giữa cuối cùng của bạn kéo một tình trạng hiện thời của công việc. đầu ra ví dụ (Tôi đã thêm một --- như chia giữa --stat--dirstat đầu ra để làm cho nó rõ ràng hơn):

mu-plugins/media_att_count.php      | 0 
mu-plugins/phpinfo.php        | 0 
mu-plugins/template_debug.php      | 0 
themes/dev/archive.php        | 0 
themes/dev/category.php       | 42 ++++++++++++++++++ 
.../page_templates/foo_template.php    | 0 
themes/dev/style.css        | 0 
themes/dev/tag.php         | 44 +++++++++++++++++++ 
themes/dev/taxonomy-post_format.php    | 41 +++++++++++++++++ 
themes/dev/template_parts/bar_template.php   | 0 
themes/someproject/template_wrappers/loop_foo.php | 51 ++++++++++++++++++++++ 
--- 
11 files changed, 178 insertions(+) 
    71.3% themes/dev/ 
    28.6% themes/someproject/template_wrappers/ 
100.0% themes/ 
    27.2% mu-plugins/ 
    9.0% themes/dev/page_templates/ 
    9.0% themes/dev/template_parts/ 
    63.6% themes/dev/ 
    9.0% themes/someproject/template_wrappers/ 
    72.7% themes/ 
Các vấn đề liên quan