Làm cách nào tôi có thể cam kết tệp với git?


84

Không có hướng dẫn nào sẽ giúp ích!
Tất cả họ đều làm điều đó mà họ chỉ cho rằng tôi biết phải làm gì ..

Hiện tại, cửa sổ đầu cuối của tôi bắt đầu bằng ..

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    httpdocs/newsite/manifest/cache/0a432970ba6491fe65dad60b012e5c95_louloumay2011en-1-4dea3186b7f7b.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0a61b5d7a9e97da78fe602e1ad41edb6_5-4dec7c3d57c80.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0afb6a7716a85d0de46cdd03bb30f75f_fifa_panorama_full_page-01_thu-4dea3d1a0e0f5.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0b3bc9be76a5d3e1e36af4b8dcf98658_free2-4df0e2e08761f.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0b6342913b8e599fac76da452af98ec5_si-feb-2009-1-4dea3d1abcb61.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0b9ddc587340f7744e03c4b2dafacf7f_lou-lou-winter-2009-cover-4dea3d1a9b1a0.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0bf64ff8fc22720b3da20d0730fa6a04_chatelaine-dec-2009-4dea3d18daa30.jpg
#       deleted:    httpdocs/newsite/manifest/cache/0bf664e03eb0a2255b69b02aed85add0_summumfeb2011-2-4dea3188766aa.jpg

nhưng không có cách nào để biết cách thực hiện những gì họ nói ở đây ..
http://learn.github.com/p/normal.html

Tất cả những gì nó nói là

Chúng tôi chỉ cần nhập thông báo cam kết của mình và thoát khỏi trình chỉnh sửa.

Điều đó nghĩa là gì?!
Chỉ vì bạn viết từ đơn giản không có nghĩa là nó đơn giản ..

Khi tôi bắt đầu nhập, nó hiện lên những thứ như "ghi âm" hoặc "chèn" và có khoảng 300 tệp và nó muốn tôi thay thế mọi dòng bằng một thông báo?!?

Cứu giúp !

Tôi sẽ sử dụng ứng dụng Mac tiện dụng của họ cho việc này, nhưng nếu có hơn 20 tệp hoặc lâu hơn, nó sẽ bị đóng băng!
Có chuyện gì vậy ??


10
Điều đó không liên quan gì đến câu hỏi của tôi. Nếu tôi nói "làm thế nào để trượt tuyết xuống một ngọn đồi", sau đó bạn nói với một người như thế nào để trượt tuyết, bạn không nói "tốt, tại sao bạn trên một ngọn núi"
Kirk Strobeck

2
Một cam kết không có đối số -m khởi chạy trình soạn thảo văn bản nơi bạn có thể đưa ra nhận xét của mình. (Có thể mặc định là vim trong trường hợp này.) Tác giả hướng dẫn giả định rằng bạn đã biết cách sử dụng nó.
Alex Howansky,

@alex cảm ơn bạn đã giải thích
Kirk Strobeck

Ai đó quen thuộc với OSX hơn tôi có thể cho bạn biết cách đặt trình chỉnh sửa mặc định của bạn thành một cái gì đó khác. Thông thường, nó là "export EDITOR = / path / to / anything" trong cấu hình khởi động shell của bạn.
Alex Howansky,

6
-1 cho RT [F] M. Trình chỉnh sửa mặc định dường như là vấn đề, không thiếu việc đọc tài liệu git.
Philip Oakley

Câu trả lời:


92

Khi bạn chạy git commitmà không có đối số, nó sẽ mở trình soạn thảo mặc định của bạn để cho phép bạn nhập thông báo cam kết. Lưu tệp và thoát khỏi trình chỉnh sửa sẽ thực hiện cam kết.

Có vẻ như trình chỉnh sửa mặc định của bạn là Vi hoặc Vim. Lý do "điều kỳ lạ" xảy ra khi bạn nhập là Vi không bắt đầu ở chế độ chèn - bạn phải nhấn ivào bàn phím của mình trước! Nếu bạn không muốn điều đó, bạn có thể thay đổi nó thành một cái gì đó đơn giản hơn, ví dụ:

git config --global core.editor nano

Sau đó, bạn sẽ tải trình chỉnh sửa Nano (giả sử nó được cài đặt!) Khi bạn cam kết, điều này trực quan hơn nhiều cho những người dùng chưa sử dụng trình chỉnh sửa phương thức như Vi.

Văn bản bạn nhìn thấy trên màn hình chỉ để nhắc nhở bạn những gì bạn sắp cam kết. Các dòng đứng trước #có nghĩa là chúng là nhận xét, tức là Git bỏ qua các dòng đó khi bạn lưu thông báo cam kết của mình. Bạn không cần phải nhập thông báo cho mỗi tệp - chỉ cần nhập một số văn bản vào đầu bộ đệm của trình soạn thảo.

Để bỏ qua trình soạn thảo, bạn có thể cung cấp một thông báo cam kết làm đối số, ví dụ:

git commit -m "Added foo to the bar"

Khi bạn nói "bỏ qua" điều đó có nghĩa là nó sẽ tiếp tục được dàn dựng?
Kirk Strobeck

3
Không, những dòng đó không ảnh hưởng đến những gì sẽ được cam kết. Các tệp đó sẽ vẫn được cam kết ngay cả khi bạn xóa các dòng bình luận. Chúng chỉ là lời nhắc nhở về trạng thái của kho lưu trữ của bạn khi bạn chạy git commitlệnh.
Ben James

Vì vậy, nếu tôi chạy cam kết, thay đổi sẽ được ghi lại, ngay cả khi có #trên dòng đó?
Kirk Strobeck

2
Đúng rồi. Những gì đã cam kết là những gì đã được git addghi vào chỉ mục.
Ben James

Một tùy chọn khác là thay vì git commit, bạn có thể chạy git commit -a -m "Your message for the commit"Sau đó sẽ không có trình chỉnh sửa nào chạy.

27

Có vẻ như vấn đề duy nhất ở đây là trình chỉnh sửa mặc định được khởi chạy là vihoặc vim, mà bạn không quen thuộc. (Như mẹo nhanh chóng, để thoát khỏi trình soạn thảo mà không lưu thay đổi, nhấn Escmột vài lần và sau đó gõ :, q, !Enter.)

Có một số cách để thiết lập trình chỉnh sửa mặc định của bạn và bạn chưa cho biết bạn đang sử dụng hệ điều hành nào, vì vậy rất khó để đề xuất một cách cụ thể. Tôi khuyên bạn nên sử dụng:

 git config --global core.editor "name-of-your-editor"

... đặt tùy chọn git chung cho một trình soạn thảo cụ thể. Ngoài ra, bạn có thể đặt $EDITORbiến môi trường.


Bạn vimcheat sheet là có giá trị, đặc biệt là đối với những người đến từ đó "một biểu tượng trị giá một ngàn dòng lệnh ;-)" cộng đồng
Philip Oakley

Tôi vừa thấy viemu.com/a-why-vi-vim.html đặc biệt hữu ích trong việc giải thích tại sao vi / vim vẫn ở đây. Sau đó chuyển sang bàn phím cheat sheet viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html
Philip Oakley

24

trong trình soạn thảo độc lập Vi trong tình huống này, bạn nên

  1. nhấn Esc
  2. gõ ": wq" (không có dấu ngoặc kép)
  3. nhấn Enter

16

Lệnh để giới thiệu tất cả các tệp đã thay đổi:

git commit -a -m 'My commit comments'

-a = tất cả các tệp đã chỉnh sửa

-m = chuỗi sau là một nhận xét.

Điều này sẽ cam kết repo ổ đĩa / thư mục cục bộ của bạn. Nếu bạn muốn đẩy các thay đổi của mình lên máy chủ git / máy chủ được lưu trữ từ xa, sau loại lệnh trên:

git push

Bảng ăn gian của GitHub khá tiện dụng.


13

Tôi không biết môi trường hệ thống của bạn, nhưng có vẻ như bạn đã nhập:

git commit

Và trình chỉnh sửa mặc định của bạn đã được khởi chạy. Trong trường hợp xấu nhất (đối với bạn), nó có thể là vim :)

Nếu bạn không biết cách thoát vim, hãy sử dụng: q.

Nếu bạn gặp sự cố khác, bạn có thể sử dụng

git commit -m 'Type your commit message here'

Có cách nào để chọn một trình chỉnh sửa khác mà nó sẽ mở cùng không? Thích nano?
Kirk Strobeck

1
Chắc chắn: đây nên thay đổi biên tập mặc định để nano: git config --global core.editor nano
PKK

tin nhắn trong dấu ngoặc kép .. "Tin nhắn"
Prabs

2

Git sử dụng "chỉ mục" để chuẩn bị cam kết. Bạn có thể thêm và xóa các thay đổi khỏi chỉ mục trước khi bạn cam kết (trong hồ sơ dán bạn đã xóa ~ 10 tệp với git rm). Khi chỉ mục trông giống như bạn muốn, hãy chạy git commit.

Thông thường điều này sẽ cháy lên vim. Để chèn văn bản i, hãy <esc>quay lại chế độ bình thường, nhấn ZZđể lưu và thoát ( ZQđể thoát mà không lưu). voilà, có cam kết của bạn


2

Điều này xảy ra khi bạn không bao gồm một thông báo khi bạn cố gắng sử dụng:

git commit

Nó khởi chạy một môi trường biên tập viên. Thoát nó bằng cách gõ :q!và nhấn enter.

Nó sẽ đưa bạn trở lại thiết bị đầu cuối mà không cần cam kết, vì vậy hãy đảm bảo thử lại, lần này chuyển qua một thông báo:

git commit -m 'Initial commit'

1
Điều này thực sự đã giúp tôi nhiều hơn câu trả lời được chấp nhận bằng cách giải thích bối cảnh, điều gì đang xảy ra và cách làm cho "những thứ kỳ lạ" trở lại bình thường.
timmackay

1

Có vẻ như tất cả các chỉnh sửa đã là một phần của chỉ mục. Vì vậy, để cam kết chỉ cần sử dụng commitlệnh

git commit -m "My Commit Message"

Nhìn vào tin nhắn của bạn mặc dù bản năng của tôi nói rằng bạn có thể không muốn các cachetệp được đưa vào kho của bạn. Đặc biệt nếu nó là thứ được xây dựng ngay khi chạy chương trình của bạn. Nếu vậy thì bạn nên thêm dòng sau vào tệp .gitignore của mình

httpdocs/newsite/manifest/cache/*

nó là một dự án phụ, toàn bộ dir đang được gỡ bỏ.
Kirk Strobeck

Để xem những gì tất cả các lệnh git có kiểu git --helpnày sẽ cung cấp cho bạn tất cả các lệnh như commit, push, pull, clonevv Để được trợ giúp về một lệnh cụ thể và những gì các công tắc có sẵn loại git commit --help, git push --helpđiều này sẽ làm việc trên linux và mac dòng lệnh. Nếu bạn muốn có một ứng dụng dòng lệnh tốt, tôi sẽ giới thiệu cùng một git-scmliên kết github trên trang này. help.github.com/mac-set-up-git
Ali

1

Tôi gặp phải vấn đề tương tự, tôi đã giải quyết nó bằng cách gõ :q!rồi nhấn Enter Và nó đã giải quyết được sự cố của tôi Sau đó, chạy lệnh sau git commit -a -m "your comment here"

Điều này sẽ giải quyết vấn đề của bạn.


1
Câu trả lời đó đã được đưa ra ở đây ( stackoverflow.com/a/7080907/2827823 ) ... hai lần thực sự, vì vậy chúng tôi không cần một câu trả lời nữa.
Ason
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.