2011-10-09 59 views
225

Tôi đã làm một git commit -m "message" như thế này:Tại sao 'git commit' không lưu thay đổi của tôi?

> git commit -m "save arezzo files" 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: arezzo.txt 
#  modified: arezzo.jsp 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Nhưng sau đó, khi tôi làm git status nó cho thấy các tập tin cùng chỉnh sửa:

> git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: arezzo.txt 
#  modified: arezzo.jsp 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Tôi đang làm gì sai?

+16

Sử dụng 'git commit -am 'lưu các tệp arezzo" 'để tự động thêm tất cả các thay đổi (w.r.t.ggignign). Bạn có thể chỉ muốn thêm các tệp/dir cụ thể: 'git add file.src' – mbx

+0

Có thể trùng lặp: http://stackoverflow.com/questions/2419249/git-commit-all-the-files-using-single-cmd http : //stackoverflow.com/questions/4571106/git-commit-all-files – mbx

Trả lời

362

Như thông điệp nói:

không có thay đổi bổ sung để thực hiện (sử dụng "git add" và/hoặc "git commit -a")

Git có "khu vực dàn dựng" nơi tệp cần được thêm trước khi được cam kết, bạn có thể read an explanation of it here.


Ví dụ cụ thể của bạn, bạn có thể sử dụng:

git commit -am "save arezzo files" 

(lưu ý thêm a trong những lá cờ, cũng có thể được viết như git commit -a -m "message" - cả hai làm điều tương tự)

Ngoài ra, nếu bạn muốn chọn lọc hơn về những gì bạn thêm vào cam kết, bạn sử dụng lệnh git add để thêm các tệp thích hợp vào khu vực dàn dựng và git status để xem trước những gì sắp được thêm vào (nhớ chú ý đến từ ngữ được sử dụng).

Bạn cũng có thể tìm thấy tài liệu chung và hướng dẫn về cách sử dụng git trên git documentation page, nó sẽ cung cấp thêm chi tiết về khái niệm dàn dựng/thêm tệp.


Một điều khác đáng được biết đến là interactive staging - điều này cho phép bạn thêm bộ phận của một tập tin vào vùng dàn, vì vậy nếu bạn đã thực hiện ba thay đổi mã riêng biệt (đối với chức năng liên quan nhưng khác nhau) , bạn có thể sử dụng chế độ tương tác để tách các thay đổi và thêm/cam kết từng phần một. Việc có các cam kết cụ thể nhỏ hơn như thế này có thể hữu ích.

+0

@PeterBoughton có phải ý bạn là "thêm tương tác" thay vì "tương tác thêm" không? – djb

+3

Không, tôi có nghĩa là thêm tương tác. –

+0

(cảm ơn, xấu hổ phải mất 10 tháng để mọi người phát hiện) –

37

Bạn nên làm:

git commit . -m "save arezzo files" 
+2

+1 Bạn là người tiết kiệm cuộc sống! – Miguel

+3

Điều này có vẻ là câu trả lời đúng cho câu hỏi của OP. Anh không muốn "thêm", anh muốn cam kết những gì đã được sửa đổi. – VectorVortec

41

Bạn không thêm thay đổi. Hoặc đặc biệt thêm chúng qua

git add filename1 filename2 

hoặc thêm tất cả thay đổi (từ đường dẫn gốc của dự án)

git add . 

hoặc sử dụng viết tắt -a khi commiting:

git commit -a -m "message". 
+0

Ngoài ra, tôi mạnh mẽ kêu gọi người dùng sử dụng tương tác thêm. Đặc biệt là khi bạn đang cố gắng thực hiện các cam kết nhỏ dễ dàng có thể đảo ngược. – jer

4

lẽ là một điều hiển nhiên , nhưng ...

Nếu bạn gặp sự cố với chỉ mục, hãy sử dụng git-gui. Bạn nhận được một cái nhìn rất tốt như thế nào chỉ số (khu vực dàn dựng) thực sự hoạt động.

Một nguồn thông tin khác giúp tôi hiểu chỉ mục là trang Scott Chacons "Bắt Git" 259 và chuyển tiếp.

Tôi bắt đầu bằng cách sử dụng dòng lệnh vì hầu hết các tài liệu chỉ cho thấy ...

Tôi nghĩ git-gui và gitk thực sự làm cho tôi làm việc nhanh hơn, và tôi đã thoát khỏi những thói quen xấu như "git pull" cho Ví dụ ... Bây giờ tôi luôn tìm nạp trước ... Xem những thay đổi mới thực sự là gì trước khi tôi hợp nhất.

7

Tôi đã sao chép một dự án phụ nhỏ mà tôi đã có dưới sự kiểm soát nguồn Git vào một dự án khác và quên xóa thư mục .git. Khi tôi đi đến cam kết, tôi nhận được thông báo tương tự như trên và không thể xóa nó cho đến khi tôi xóa thư mục .git.

Đó là một chút ngớ ngẩn, nhưng nó là giá trị kiểm tra bạn không có một thư mục .git dưới thư mục không cam kết.

6

Bạn có thể đã làm một:

git add -u -n 

Để kiểm tra những file nào bạn sửa đổi và sẽ được bổ sung (chạy khô: Tùy chọn -n), và sau đó

git add -u 

Để thêm chỉ đã sửa đổi các tệp

4

Tôi thấy vấn đề này xuất hiện khi tôi đã thực hiện git add . trong thư mục con bên dưới nơi sốcủa tôicuộc sống tập tin (thư mục chính của kho lưu trữ của tôi, để nói). Hãy thử thay đổi thư mục thành thư mục trên cùng của bạn và chạy git add . theo sau là git commit -m "my commit message".

0

Tôi gặp sự cố khi đang thực hiện commit --amend ngay cả sau khi phát hành git add . và vẫn không hoạt động. Hóa ra tôi đã thực hiện một số tùy chọn .vimrc và trình chỉnh sửa của tôi không hoạt động chính xác. Sửa các lỗi này để vim trả lại mã đúng đã giải quyết được sự cố.

3

Lý do tại sao điều này xảy ra là vì bạn có thư mục đang được Git theo dõi bên trong một thư mục khác cũng được Git theo dõi. Ví dụ, tôi đã có một dự án và tôi đã thêm một thư mục con vào nó. Cả hai người họ đều bị Git theo dõi trước khi tôi đặt nó vào bên trong. Để ngừng theo dõi bên trong, hãy tìm và xóa tệp Git bằng:

rm -rf .git 

Trong trường hợp của tôi, tôi có ứng dụng WordPress và thư mục tôi đã thêm vào là chủ đề. Vì vậy, tôi đã phải đi đến chủ đề gốc, và loại bỏ các tập tin Git, để toàn bộ dự án bây giờ sẽ được theo dõi bởi cha mẹ, các ứng dụng WordPress.

+1

Đây là thứ đã cứu tôi - cảm ơn! –

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