Git cam kết mở tệp văn bản trống, để làm gì?


93

Trong tất cả các hướng dẫn Git mà tôi đã đọc, họ nói rằng bạn có thể làm:

git init
git add .
git commit

Khi tôi làm điều đó, tôi sẽ mở ra một tệp văn bản lớn. Dường như không có hướng dẫn nào giải quyết vấn đề này, vì vậy tôi không biết phải làm gì với tệp hoặc những gì để đưa vào tệp nếu có.

Câu trả lời:


124

Bạn muốn đặt thông báo cam kết vào tệp văn bản này, sau đó lưu và thoát.

Bạn có thể thay đổi trình soạn thảo văn bản mặc định mà git sử dụng bằng lệnh này:

git config --global core.editor "nano"

Bạn phải thay đổi nano thành bất kỳ lệnh nào thường mở trình soạn thảo văn bản của bạn.


15
Bạn không phải thêm --globalđể thay đổi mặc định?
Znarkus

4
@Znarkus điểm tốt. Xem ở đây để biết thêm thông tin. Về cơ bản, câu trả lời được đưa ra sẽ chỉ thay đổi cài đặt cho dự án hiện tại, trong khi --globalthay đổi nó cho người dùng hiện tại và --systemthay đổi nó cho mọi người trên máy tính đó.
Matt Fenwick

24
Mặc dù câu trả lời này chứa thông tin tốt, nhưng nó không giải quyết được câu hỏi thực tế.
Adrian Schmidt

5
Tôi không hiểu tại sao điều này lại có số phiếu ủng hộ tăng gấp đôi vì một số câu trả lời THỰC SỰ trả lời câu hỏi. Điều này không.
Johan

2
@Johan, Bạn không sai, nhưng tình cờ gặp phải điều này, tôi thấy câu trả lời này cực kỳ hữu ích. Vì vậy, tôi đã ủng hộ nó.
Danation

65

Như Ben Collins đã đề cập , không có -m "..."đối số để nhập nội tuyến cam kết (thường là một ý tưởng tồi vì nó khuyến khích bạn ngắn gọn), "tệp văn bản lớn" này được mở ra là một cửa sổ để nhập thông báo cam kết. .

Thông thường, bạn nên viết tóm tắt ở dòng đầu tiên, bỏ qua một dòng và sau đó viết các ghi chú chi tiết hơn bên dưới; điều này giúp các chương trình thực hiện những việc như gửi email thông báo cam kết với dòng chủ đề thích hợp và danh sách đầy đủ các thay đổi được thực hiện trong phần nội dung.

Thay vì thay đổi EDITORbiến shell, bạn cũng có thể thay đổi trình chỉnh sửa được sử dụng bằng cách thêm các dòng bổ sung trong ~/.gitconfigtệp của bạn :

[core]
    editor = emacs
    excludesfile = /Users/will/.gitignore

Dòng thứ hai đó thực sự không liên quan gì đến vấn đề của bạn, nhưng tôi thấy nó thực sự hữu ích để tôi có thể điền ~/.gitignoretệp của mình với tất cả các loại tệp đó mà tôi biết rằng tôi sẽ không bao giờ muốn cam kết vào một kho lưu trữ.


36

Tệp văn bản đang được mở là một bản tóm tắt của hoạt động cam kết hiện tại. Cam kết git đưa bạn vào tệp này để bạn có thể thêm thông báo cam kết ở đầu tệp. Khi bạn đã thêm tin nhắn của mình, chỉ cần lưu và thoát khỏi tệp này.

Cũng có một công tắc "-m msg" trên lệnh này cho phép bạn thêm thông báo cam kết trên dòng lệnh.


Xin chào Lou, tôi cũng là người mới bắt đầu về GIt. Tôi nghĩ rằng sau khi tôi tồn tại hoặc viết và tồn tại tệp văn bản, git đã không thực sự cam kết dàn dựng và thông báo cam kết mà tôi vừa được viết. Vì vậy, ý nghĩa của việc thêm thông báo vào tệp văn bản này nếu tôi không thể thực hiện cam kết sau khi ghi và thoát khỏi nó. (vui lòng sửa cho tôi nếu tôi sai, cảm ơn rất nhiều)
SLN

@SLN Kịch bản bạn đang vạch ra không rõ ràng lắm. Tôi sẽ phỏng đoán và gợi ý rằng có thể bạn chưa dàn dựng bất kỳ tệp nào cho commit, do đó, nỗ lực commit của bạn chẳng có tác dụng gì. Sử dụng "git add" cho các tệp giai đoạn đầu mà bạn muốn cam kết, sau đó "git commit" để thực hiện cam kết thực tế.
Lou

15

Nếu bạn đang sử dụng Mac OS X và sử dụng BBEdit, bạn có thể thiết lập điều này làm trình chỉnh sửa được lựa chọn cho các thông báo cam kết:

git config --global core.editor "bbedit -w"

Sau khi chỉnh sửa xong, hãy lưu và đóng tệp và git sẽ sử dụng nó cho các nhận xét.


15

Giả sử rằng trình soạn thảo của bạn mặc định là vi / vim, bạn có thể thoát khỏi trình soạn thảo tin nhắn cam kết bằng cách nhập:

:x

sẽ lưu và thoát khỏi tệp tin cam kết. Sau đó, bạn sẽ quay lại phần lệnh git bình thường.

Các lệnh vi khác:
http://www.lagmonster.org/docs/vi.html


9
Nếu bạn giống tôi, bạn đang ở chế độ chèn / thay thế (tức là nhập thông báo cam kết). Nếu vậy, bạn sẽ phải nhấn escđể vào chế độ lệnh trước khi nhập :xđể lưu và thoát.
Martin Carney

1
Tất nhiên, giả sử rằng trình soạn thảo của anh ấy mặc định là vi / vim. Điều này sẽ không đúng với tất cả mọi người. Chắc chắn không dành cho người dùng emacs này;)
haziz

Điều này đã cứu tôi rất nhiều rắc rối. Cảm ơn bạn rất rất nhiều
Danation

12

Như tất cả đã nói, đây chỉ là nơi bạn thêm nhận xét cam kết của mình - nhưng đối với một số người, nó vẫn có thể gây nhầm lẫn đặc biệt nếu bạn chưa định cấu hình cài đặt trình chỉnh sửa của mình và bạn không biết VI là gì : thì bạn có thể bị sốc , bởi vì bạn sẽ nghĩ rằng bạn vẫn ở trong GIT-Bash

Trong trường hợp đó, trên thực tế, bạn đang ở trong một trình soạn thảo văn bản với một số cách xử lý thú vị và bộ lệnh này có thể giúp bạn để bạn có thể vượt qua cam kết đầu tiên của mình và sau đó định cấu hình trình soạn thảo mà bạn quen thuộc hoặc sử dụng nó như một cơ hội để học cách sử dụng nó.


8
Tôi biết kết thúc trong vi luôn gây sốc cho tôi :)
Will Robertson

1
Mọi thứ giờ có ý nghĩa hơn nhiều. +1
Matt Ellen

11

Các -mtùy chọn để cam kết cho phép bạn nhập một cam kết thông báo trên dòng lệnh:

git commit -m "my first commit"

7

Khi bạn tạo một cam kết mới, git sẽ kích hoạt một trình soạn thảo văn bản và viết một số nội dung vào đó.

Bằng cách sử dụng trình soạn thảo văn bản này, mục đích là bạn viết thông điệp cam kết sẽ được liên kết với cam kết do bạn tạo ra.

Sau khi hoàn tất, hãy lưu và thoát khỏi trình soạn thảo văn bản. Git sẽ sử dụng những gì bạn đã viết làm thông báo cam kết.

Thông báo cam kết có một cấu trúc cụ thể, được mô tả như sau:

Dòng đầu tiên của thông báo cam kết được sử dụng làm tiêu đề (hoặc tiêu đề) thông báo. Độ dài ưu tiên của tiêu đề cam kết ít hơn 40 ký tự, vì đây là số ký tự mà github hiển thị trên tab Cam kết của một kho lưu trữ nhất định trước khi cắt bớt, một số người cảm thấy khó chịu.

Khi soạn phần tiêu đề, sử dụng động từ thì hiện tại viết hoa cho từ đầu tiên là thông lệ, mặc dù không bắt buộc.

Một dòng mới mô tả tiêu đề và nội dung của thư.

Cơ thể có thể chứa bất cứ thứ gì bạn thích. Tổng quan về những thay đổi được giới thiệu bởi cam kết của bạn là hợp lý. Một số ứng dụng của bên thứ ba sử dụng thông tin bao gồm nội dung của thông báo cam kết để thiết lập các loại móc khác nhau (tôi đang nghĩ đến Gerrit và Pivotal Tracker, để đặt tên cho hai).

Đây là một ví dụ ngắn gọn và thú vị. Một hàng đầu #biểu thị một nhận xét.

Gitignore index.pyc

Ignore gunicorn generated binary file
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch dev
# Your branch is ahead of 'origin/dev' by 10 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#

Đây là một trong những ông Torvalds lựa chọn những gì tạo nên một cam kết tốt.

ở đây Tpope cũng làm như vậy.

Như đã nêu trong một số câu trả lời khác, việc thay đổi trình soạn thảo mặc định là một phần trong dòng lệnh.

Đối với sở thích của tôi:

git config --global core.editor "vim"

2
đây phải là câu trả lời được chấp nhận cho câu hỏi.
mppfiles

6

Hãy thử Escape rồi đến ZZ, sau khi bạn nhập xong tin nhắn của mình. Như những người khác đã nói khi bạn chạy lệnh cam kết đó, nó thực sự chạy một trình soạn thảo văn bản để nhập tin nhắn vào. Trong trường hợp của tôi (OS X), đó là VI, mà tôi đã tìm ra sau khi tìm hiểu kỹ. Trong trường hợp đó, nhấn Escape để chuyển sang chế độ "lệnh" (trái ngược với chế độ CHÈN) và nhập ZZ. Tôi chắc rằng có nhiều cách khác để hoàn thành nhiệm vụ nhưng điều đó đã làm được điều đó cho tôi. Chưa bao giờ sử dụng VI hoặc emacs, điều đó không dễ thấy đối với tôi và không được đề cập trong bất kỳ hướng dẫn dành cho người mới bắt đầu nào mà tôi đang sử dụng. Hy vọng rằng điều này sẽ giúp.


4

Các git commitlệnh sẽ mở ra các biên tập viên được quy định trong EDITORbiến môi trường, do đó bạn có thể nhập một lời nhận xét cam kết. Trên hệ thống Linux hoặc BSD, điều này phải là vi theo mặc định, mặc dù bất kỳ trình soạn thảo nào cũng hoạt động.

Chỉ cần nhập nhận xét của bạn và lưu tệp.


2

Tôi đã bối rối vì tôi tiếp tục cố gắng nhập tên tệp sau: w trong VIM. Điều đó không kích hoạt cam kết. Thay vào đó, tôi tiếp tục nhận được thông báo "Hủy cam kết do thông báo cam kết trống." Không đặt tên tệp sau: w. : w lưu tệp thành .git / COMMIT_EDITMSG theo mặc định. Sau đó: q để thoát để hoàn thành cam kết. Bạn có thể xem kết quả với git log.


hoặc bạn chỉ có thể sử dụng: x để lưu và thoát.
TJ Ellis

2

Bây giờ tôi đã thay đổi trình chỉnh sửa của mình thành emacs, mọi thứ đều hoạt động tốt.

Nhưng trước khi tôi đặt điều này, "git commit -a" đã mở gedit, nhưng cũng ngay lập tức kết thúc bằng một "Hủy cam kết do thông báo cam kết trống." Lưu tệp từ gedit không có tác dụng. Cài đặt rõ ràng trình soạn thảo với "git config --global core.editor" gedit "" có cùng kết quả.

Không có gì sai với emacs, nhưng vì tò mò tại sao điều này không hoạt động với gedit, và có cách nào để làm cho nó hoạt động không?

Cảm ơn.


nếu gedit đã chạy, thực hiện "gedit file.txt" sẽ mở tệp trong cửa sổ hiện có và ngay lập tức trở lại ... bạn nên đăng câu hỏi này như một câu hỏi thực tế, cụ thể là về cách sử dụng gedit với git.
araqnid

6
cũng gặp phải vấn đề này. bạn có thể sửa chữa nó bằng cách thiết lập gedit để chạy trong 'độc' chế độ:git config --global core.editor "gedit -s"
brittohalloran

2

Đối với những người bạn sử dụng OS XI thấy lệnh này hoạt động tốt:
git config --global core.editor "open -t -W"

điều này sẽ buộc git mở trình soạn thảo văn bản mặc định (trong trường hợp của tôi là textedit) và sau đó đợi bạn thoát ứng dụng. Hãy nhớ rằng bạn cần "Lưu" và sau đó "Thoát" nhắn tin trước khi cam kết được thực hiện. Có một số lệnh khác mà bạn có thể thực hiện như chi tiết trên trang này:

Thư viện nhà phát triển Apple - Lệnh mở

Bạn cũng có thể thử git config --global core.editor "open -e -W"nếu muốn git luôn mở textedit bất kể trình soạn thảo mặc định là gì.


1

Vâng, hãy đảm bảo rằng bạn có một bộ biên tập hợp lý. Không chắc bạn sẽ là trình soạn thảo mặc định nhưng nếu, giống như tôi, nó là nano (sẽ nói ở đâu đó gần đầu sau khi bạn nhập cam kết), bạn chỉ cần nhập nhận xét và sau đó nhấn Ctrl-x để hoàn tất. Sau đó nhấn y, tiếp theo là enter để khẳng định cam kết.

Ngoài ra, nếu bạn muốn xem một danh sách đơn giản về các tệp bạn sẽ cam kết hơn là một danh sách khác biệt khổng lồ trước khi thử

git diff --name-only

1

Khi thực hiện kiểm soát sửa đổi, bạn phải luôn giải thích những thay đổi bạn đã thực hiện là gì. Thông thường, lần đầu tiên bạn nhận được một nhận xét chẳng hạn như "Cam kết ban đầu".

Tuy nhiên về lâu dài bạn muốn nhận xét tốt cho mỗi lần cam kết. Bạn sẽ muốn một cái gì đó có dạng:

Đã thêm tính năng thử nghiệm x.

X sẽ làm tăng hiệu suất của tính năng Y trong điều kiện Z. Nếu bạn cần X kích hoạt nó bằng các công tắc -x hoặc --feature-eks. Địa chỉ này có yêu cầu # 1138.


1

Là người mới đối với Terminal cũng vậy, "Escape and then ZZ" đã làm việc cho tôi, tôi đã gặp vấn đề này trong nhiều tháng và cũng không thể tìm ra cách giải quyết.

Cảm ơn TheGeoff vì lời khuyên đơn giản của bạn!


0

Sau đây có lẽ là cách dễ nhất để thực hiện tất cả các thay đổi:

git commit -a -m "Type your commit message here..."

Tất nhiên, có nhiều cách cam kết chi tiết hơn, nhưng điều đó sẽ giúp bạn bắt đầu.

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.