Tại sao 'git commit' không lưu các thay đổi của tôi?


251

Tôi đã làm git commit -m "message"như thế này:

> 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 statusnó hiển thị các tệp đã sửa đổi tương tự:

> 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 "save arezzo files"để tự động thêm tất cả các thay đổi (wrt .gitignore). Bạn có thể chỉ muốn thêm các tệp / thư mục cụ thể:git add file.src
mbx

Câu trả lời:


400

Như thông báo:

không có thay đổi nào được thêm vào cam kết (sử dụng "git add" và / hoặc "git commit -a")

Git có một "khu vực tổ chức" nơi các tập tin cần được thêm vào trước khi được cam kết, bạn có thể đọc một lời giải thích về nó ở đây .


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

git commit -am "save arezzo files"

(lưu ý phần bổ sung atrong các cờ, cũng có thể được viết là git commit -a -m "message"- cả hai đều 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 tổ chức và trạng thái git để xem trước những gì sắp được thêm vào (nhớ phải chú ý đến từ ngữ được sử dụng).

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


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


@PeterBoughton có nghĩa là "thêm tương tác" thay vì "thêm tương tác"?
djb

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

2
Kho lưu trữ cục bộ là một loại khu vực tổ chức trước khi đẩy mã đến kho lưu trữ từ xa. Tại sao thêm một "lớp" nữa trước khi cam kết thay đổi, đó có phải là một chút quá phức tạp không? Tôi mới sử dụng git nhưng tôi tưởng tượng 99,99% nhà phát triển luôn sử dụng cam kết -am vì những thay đổi không đi ra ngoài môi trường địa phương của họ.
PawelRoman

2
Tôi nghĩ rằng tôi vừa gặp phải điều này bởi vì tôi đã quen với IDE của mình chăm sóc nó cho tôi. Không chắc tại sao đó là một bước cần thiết, nhưng một lần nữa, có rất nhiều điều về git tôi không nhận được ... Ý tôi là git ...
trpt4him

49

Bạn đã không thêm các thay đổi. Hoặc cụ thể thêm chúng thông qua

git add filename1 filename2

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

git add .

hoặc sử dụng tốc ký -atrong khi cam kết:

git commit -a -m "message".

Ngoài ra, tôi rất khuyến khích người dùng sử dụng thêm tương tác. Đặc biệt là khi bạn đang cố gắng thực hiện các cam kết nhỏ đẹp có thể đảo ngược dễ dàng.
giật

40

Bạn nên làm:

git commit . -m "save arezzo files"

4
Đây dường như là câu trả lời chính xác 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

8

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 .gitthư mục.

Nó hơi ngớ ngẩn, nhưng đáng để kiểm tra bạn không có thư mục .git trong thư mục không cam kết.


7

Bạn có thể đã thực hiện một:

git add -u -n

Để kiểm tra những tập tin bạn đã sửa đổi và sẽ được thêm vào (tùy chọn chạy khô: -n), sau đó

git add -u

Để thêm các tập tin sửa đổi


4

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


4

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

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

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

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

Tôi nghĩ git-gui và gitk thực sự khiến tôi làm việc nhanh hơn và tôi đã loại bỏ những thói quen xấu như "git pull" chẳng hạn ... 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.


3

Lý do tại sao điều này xảy ra là vì bạn có một thư mục đã đượ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 đều bị Git theo dõi trước khi tôi đặt cái này vào cái kia. Để dừng theo dõi cái bên trong, hãy tìm nó và xóa tệp Git bằng:

rm -rf .git

Trong trường hợp của tôi, tôi đã có một ứng dụng WordPress và thư mục tôi đã thêm vào là một chủ đề. Vì vậy, tôi đã phải đi đến root theme và xóa tệp Git, để toàn bộ dự án sẽ được theo dõi bởi phụ huynh, ứng dụng WordPress.


1

Nếu bạn có nhiều tệp hơn trong trường hợp của tôi, tôi có 7000 tệp hình ảnh khi tôi cố gắng thêm chúng từ thư mục tuyến của dự án thì nó đã không thêm chúng nhưng khi tôi vào thư mục hình ảnh thì mọi thứ đều ổn. Đi qua thư mục đích và lệnh như abows

git add .
git commit -am "image uploading"
git push origin master

git đẩy gốc master Liệt kê các đối tượng: 6574, xong. Đếm các đối tượng: 100% (6574/6574), xong. Nén Delta bằng cách sử dụng tối đa 4 luồng Đối tượng nén: 100% (6347/6347), đã hoàn tất. Đối tượng viết: 28% (1850/6569), 142,17 MiB | 414,00 KiB / s


0

Tôi đã có một vấn đề mà tôi đã làm commit --amendngay cả sau khi ban hành git add .và nó vẫn không hoạt động. Hóa ra tôi đã thực hiện một số .vimrctùy chỉnh và trình soạn thảo của tôi không hoạt động chính xác. Sửa các lỗi này để vimtrả về mã chính xác đã giải quyết vấn đề.


0

Tôi đã có một vấn đề rất giống với thông báo lỗi tương tự. "Thay đổi không được tổ chức cho cam kết", nhưng khi tôi thực hiện một khác biệt, nó cho thấy sự khác biệt. Cuối cùng tôi đã nhận ra rằng một thời gian trước tôi đã thay đổi một trường hợp thư mục. Ví dụ. "PostgeQuery" thành "postgresql". Như tôi nhớ bây giờ đôi khi git sẽ để lại một hoặc hai tập tin trong thư mục trường hợp cũ. Sau đó, bạn sẽ cam kết một phiên bản mới cho trường hợp mới.

Do đó, git không biết dựa vào cái nào. Vì vậy, để giải quyết nó, tôi đã phải truy cập trang web của github. Sau đó, bạn có thể xem cả hai trường hợp. Và bạn phải xóa tất cả các tập tin trong thư mục vỏ không chính xác. Hãy chắc chắn rằng bạn có phiên bản chính xác được lưu hoặc trong thư mục vỏ chính xác.

Khi bạn đã xóa tất cả các tệp trong thư mục trường hợp cũ, toàn bộ thư mục đó sẽ biến mất. Sau đó làm một cam kết.

Tại thời điểm này, bạn sẽ có thể thực hiện Kéo trên máy tính cục bộ của mình và không thấy các xung đột nữa. Do đó có thể cam kết một lần nữa. :)


0

nếu bạn có thư mục con, được sao chép từ Kho lưu trữ git khác, trước tiên, bạn phải xóa tệp $ .git $ khỏi Kho lưu trữ con: rm -rf .git sau đó bạn có thể thay đổi thư mục mẹ và sử dụng git add -A.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.