Những thay đổi trong phạm vi không được tổ chức cho cam kết là gì


238

Tôi nghĩ nếu bạn muốn theo dõi các tập tin bạn nên git add [files you want to track]

Tôi không biết tại sao tôi nhận được tin nhắn Changes not staged for commit.

Nếu các tệp đó không được dàn dựng, không nên gitcho tôi xem các tệp đó là Untrackednhư thế

nhập mô tả hình ảnh ở đây

Tất cả những gì tôi đã làm là tạo ra một tính năng mới từ developchi nhánh và làm việc trong feature/change_excel_formatchi nhánh

Tôi nghĩ những tập tin đó nên ở stagedtrạng thái,

Nhưng git statusnói với tôiChanges not staged for commit

nhập mô tả hình ảnh ở đây

Để ngắn gọn, tôi chỉ biết có 3 giai đoạn trong git untracked, staged, committed Bất kỳ một thể cho tôi biết, là những gì các giai đoạn trong choChanges not staged for commit nhập mô tả hình ảnh ở đây

Vì vậy, nếu tôi sửa đổi tập tin a (đã có trong repo)

và gõ git st, git sẽ cho tôi biếtChanges not staged for commit

nếu tôi git athì tập tin asẽ ởstaged status

Nếu tôi sửa đổi file angay bây giờ, sẽ có hai trạng thái file atrong git, phải không?

Vì vậy, tôi phải quyết định nếu thực hiện staged acam kết hoặc làm not stage acho được dàn dựng, và sau đó các giai đoạn trước file asẽ được loại bỏ?

nhập mô tả hình ảnh ở đây


3
nếu nhận được thông báo này và bạn có muốn tệp này (a) cần phải cam kết không, hãy đảm bảo bạn đang ở đúng đường dẫn thư mục (đường dẫn gốc của dự án để thêm tất cả) trong khi bạn git add
Sadee 26/11/18

Câu trả lời:


324

Khi bạn thay đổi một tập tin đã có trong kho lưu trữ, bạn phải làm git addlại nó nếu bạn muốn nó được dàn dựng.

Điều này cho phép bạn chỉ cam kết một tập hợp con các thay đổi bạn đã thực hiện kể từ lần xác nhận cuối cùng. Ví dụ: giả sử bạn có tệp a, tệp bvà tệp c. Bạn sửa đổi tệp avà tệp bnhưng về bản chất các thay đổi rất khác nhau và bạn không muốn tất cả chúng nằm trong một cam kết duy nhất. Bạn phát hành

git add a
git commit a -m "bugfix, in a"
git add b
git commit b -m "new feature, in b"

Là một lưu ý phụ, nếu bạn muốn cam kết mọi thứ, bạn chỉ cần gõ

git commit -a

Hy vọng nó giúp.


1
Vì vậy, nếu những tập tin đó là alreday trong repo. và tôi đã thay đổi chúng, tôi cũng có thể git commit THEMtrực tiếp mà không cần thêm chúng, phải không?
newBike

1
tất nhiên. Và trong trường hợp đó, chỉ các tệp được liệt kê sẽ được cam kết, bất kể sự thay đổi theo giai đoạn trong các tệp khác nhau.
Stefano Falasca

1
Tôi đã có cùng một vấn đề nhưng vấn đề của tôi cũng là về nguyên nhân của các tập tin không được theo dõi. Vì vậy, trong thư mục con của tôi, tôi cũng thêm tất cả các thay đổi với git và vấn đề đã biến mất.
elia

1
Tôi đã hoàn thành git clean -fdvà tôi vẫn nhận được điều này. Tôi muốn thoát khỏi tất cả những thay đổi. Tôi nên làm gì khác?
Mật ong

3
git commit -akhông cam kết tất cả mọi thứ, chỉ các tệp được cập nhật, không phải các tệp mới ...
Martin

62

Bạn phải sử dụng git add để tạo giai đoạn cho họ, hoặc họ sẽ không cam kết. Lấy nó mà nó thông báo cho git đó là những thay đổi bạn muốn cam kết.

git add -u :/thêm tất cả các thay đổi tệp đã sửa đổi vào giai đoạn git add * :/thêm sửa đổi và bất kỳ tệp mới nào (không phải là gitignore'ed) vào giai đoạn


2
Câu trả lời này rõ ràng và súc tích so với câu hỏi trên, đó là lý do tại sao tôi thích nó. ;)
oaxacamatt

12

Đó là một cách khác của Git nói với bạn:

Xin chào, tôi thấy bạn đã thực hiện một số thay đổi, nhưng hãy nhớ rằng khi bạn viết các trang vào lịch sử của tôi, những thay đổi đó sẽ không có trong các trang này.

Thay đổi đối với các tệp không được tổ chức nếu bạn không rõ ràng git addchúng (và điều này có ý nghĩa).

Vì vậy, khi bạn git commit, những thay đổi đó sẽ không được thêm vào vì chúng không được tổ chức. Nếu bạn muốn cam kết với họ, trước tiên bạn phải thực hiện chúng (ví dụ. git add).


2
Nhưng tôi đã không thay đổi tập tin mà nó tham chiếu
Eoin

1
Tôi không hiểu chính xác hành vi này có ý nghĩa như thế nào. Nếu tôi đã bảo Git theo dõi một tệp bằng cách thực hiện add .khi tôi thiết lập repostiry và nó có thể phát hiện ra tôi đã thay đổi nó, tại sao tôi cần phải thêm các tệp một cách rõ ràng mỗi khi tôi cam kết? Chỉ cần thực hiện một thay đổi cho một tập tin, tôi phải add, commit push . Việc phân định giữa commitvà đẩy có ý nghĩa với tôi, ranh giới giữa addcommitdường như dư thừa một cách lố bịch.
Prometheus

1
@Hashim Tôi đồng ý, tôi thực sự không hiểu logic.
Herman Toothrot

6

Làm theo các bước dưới đây:

1- git stash
2- git thêm.
3- git commit -m "thông điệp cam kết của bạn"


5
git stash đã xóa tất cả các thay đổi của tôi, đó là 10 giờ làm việc :(
viniciussvl

13
nếu bạn đã sử dụng "git stash", hãy đặt những thay đổi đó thành "địa điểm tạm thời" để lấy lại chúng chỉ cần gõ "git stash pop" để nhận thay đổi của bạn từ "địa điểm tạm thời"
Cyrus Zei

12
KHÔNG SỬ DỤNG git stash cho đến khi bạn đọc bình luận @viniciussvl và Cyrus
tồi tàn

1
Tại sao tôi thậm chí sẽ sử dụng git stash trong trường hợp này?
Tobias Kaufmann

4

Giả sử bạn đã lưu một thay đổi tập tin mới. (navbar.component.html chẳng hạn)

Chạy:

ng status
modified:   src/app/components/shared/navbar/navbar.component.html

Nếu bạn muốn tải lên những thay đổi cho tệp đó, bạn phải chạy:

git add src/app/components/shared/navbar/navbar.component.html

Và sau đó:

git commit src/app/components/shared/navbar/navbar.component.html -m "new navbar changes and fixes"

Và sau đó:

git push origin [your branch name, usually "master"]

-------------------------------------------------- -------------

Hoặc nếu bạn muốn tải lên tất cả các thay đổi của mình (một vài / tất cả các tệp):

git commit -a

Và chúng sẽ xuất hiện "Vui lòng nhập thông báo cam kết cho các thay đổi của bạn."

  • Bạn sẽ thấy thông báo này nếu bạn git commit mà không có tin nhắn (-m)
  • Bạn có thể thoát khỏi nó bằng hai bước:
  • 1.a. Nhập một tin nhắn nhiều dòng để di chuyển foward với cam kết.
  • 1.b. Để trống để hủy bỏ cam kết.
    1. Nhấn "esc" rồi gõ ": wq" và nhấn enter để lưu lựa chọn của bạn. Viola!

Và sau đó:

git push

Và Viola!


2
Tương tự tôi đã nói ở trên: git commit -akhông tải lên tất cả các thay đổi, nó không bao gồm các tệp mới. Nó sẽ chỉ cam kết các bản cập nhật cho các tập tin tồn tại.
Martin

3

Hãy thử làm theo int git bash

1.git add -u :/

2.git commit -m "your commit message"

  1. git push -u origin master

Lưu ý: nếu bạn chưa khởi tạo repo của mình.

Đầu tiên

git init 

và làm theo các bước được đề cập ở trên theo thứ tự. Điều này làm việc cho tôi


Vấn đề này đã làm việc với tôi, trong một cuộc xung đột git nơi tôi không thể xóa một tệp khỏi kho lưu trữ cục bộ của mình và cam kết từ kho lưu trữ cục bộ đến nhánh chính từ xa.
Siwoku Adeola ngày

1

điều đó có nghĩa là chúng không được thêm vào để được cam kết, bạn sẽ phải thực hiện git add scripts / excel_parser.py và thích tạo giai đoạn cho chúng .. một khi chúng được dàn dựng khi bạn thực hiện trạng thái git, chúng sẽ được tổ chức và git commit sẽ cam kết chúng

trong số bạn có thể git commit -a -m "tất cả checkin" sẽ tự động tạo giai đoạn và cam kết tất cả các tệp trong cây


1

Bạn có thể thấy lỗi này khi bạn đã thêm một tệp mới vào mã của mình và bạn hiện đang cố gắng cam kết mã mà không dàn dựng (thêm) nó.

Để khắc phục điều này, trước tiên bạn có thể thêm tệp bằng cách sử dụng git add ( git add your_file_name.py) và sau đó thực hiện các thay đổi ( git commit -m "Rename Files" -m "Sample script to rename files as you like")


1

Tôi đã đọc tất cả các phản hồi ở trên và đã thử trong thiết bị đầu cuối theo các bước hoạt động tốt để cập nhật tệp mới và thay đổi tệp trên bản gốc.

1) thêm git. 2) git commit -m "tin nhắn của bạn" 3) git đẩy bản gốc

Tôi hy vọng cái này sẽ giúp bạn.



-7

Tẩy dir/.../.git

làm việc cho tôi


câu trả lời của bạn cần thông tin cơ bản hoặc hiểu biết tại sao hoặc làm thế nào nó hoạt động cho bạn.
Joshua K

Như là, câu trả lời không hỗ trợ câu hỏi. Vui lòng xem xét để thay đổi hoặc thêm thông tin.
Francisco Maria Calisto
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.