Git cam kết không có thông báo cam kết


108

Làm cách nào tôi có thể cam kết các thay đổi mà không chỉ định thông báo cam kết? Tại sao nó được yêu cầu theo mặc định?


6
Cuối cùng, git commit -a --allow-empty-message -m ''thậm chí sẽ không mở trình chỉnh sửa nữa. Xem câu trả lời của tôi bên dưới
VonC

2
Trên Windows lệnh này git commit -a --allow-empty-message -m ''làm cho cam kết với cam kết thông báo " ''", vì vậy nó là tốt hơn để sử dụng lệnh này để thay thế: git commit -a --allow-empty-message -m "".
tav

Câu trả lời:


137

git thường yêu cầu một thông báo không trống bởi vì cung cấp một thông điệp cam kết có ý nghĩa là một phần của thực tiễn phát triển tốt và quản lý kho lưu trữ tốt. Dòng đầu tiên của thông báo cam kết được sử dụng khắp nơi trong git; để biết thêm, hãy đọc "Lưu ý về thông báo cam kết Git" .

Nếu bạn mở Terminal.app, cdvào thư mục dự án của mình, và git commit -am ''bạn sẽ thấy rằng nó không thành công vì không cho phép thông báo cam kết trống. Các phiên bản git mới hơn có
--allow-empty-messageđối số dòng lệnh, bao gồm cả phiên bản git đi kèm với phiên bản Xcode mới nhất. Điều này sẽ cho phép bạn sử dụng lệnh này để thực hiện cam kết với một thông báo trống:

git commit -a --allow-empty-message -m ''

Trước --allow-empty-messagecờ, bạn phải sử dụng commit-treelệnh sửa ống nước. Bạn có thể xem ví dụ về cách sử dụng lệnh này trong chương "Git thô" của sách Git .


1
Các phiên bản mới hơn của git--allow-empty-messageđối số dòng lệnh. Xem tài liệu tại đây . Nó đề cập đến việc bạn đã từng có thể hoàn thành điều tương tự bằng cách sử dụng lệnh sửa ống nước git-commit-tree.
Jeremy W. Sherman

18
Tôi nghĩ câu "cung cấp một thông điệp cam kết có ý nghĩa một phần của thực tiễn phát triển tốt" là sai - người ta có thể nói rằng việc cung cấp một thông điệp cam kết có ý nghĩa được coi là một phần của thực tiễn phát triển tốt, vì dù sao câu nói này cũng có tính chất chia rẽ - Tôi vì một tin rằng ít thông tin hơn đôi khi dẫn đến ít nhầm lẫn hơn, đặc biệt là vì git rõ ràng lưu trữ các thay đổi thực tế đối với kho lưu trữ và a git diffsẽ hiển thị cho bên quan tâm chính xác nội dung cam kết chứa mà không cần dựa vào mô tả bằng văn bản của con người. Máy móc sẽ giúp chúng ta tiết kiệm sức lao động nếu có thể.
Amn

2
@amn, tôi cũng vừa mới bắt đầu tự hỏi về hàng chục nghìn thông điệp cam kết được viết tốt mà tôi đã viết mà sẽ không bao giờ có ai đọc được. Đối với tôi bây giờ giá trị của thói quen này là nó buộc tôi phải xem qua những thay đổi trong nỗ lực mô tả chúng, và điều này đôi khi khiến tôi nhận thấy có lỗi. Bạn đúng, mặc dù. Tôi sẽ cân nhắc chú ý nhiều hơn đến mã và ít chú ý hơn đến thông báo cam kết.
osa

7
Git không chỉ được sử dụng để phát triển mã nữa. Khi tôi cập nhật trang wiki GitHub hoặc tài liệu Overleaf LaTeX, thường không có gì để nói vì tôi đang cập nhật tài liệu. Tất cả mọi thứ có ý nghĩa về mặt ngữ nghĩa về sự thay đổi được chứa trong khác biệt. Tôi thực sự thấy mình đang sử dụng văn bản của sự thay đổi làm thông báo cam kết: hoàn toàn thừa!
Jim Pivarski,

1
@amn, đôi khi đầu ra của git diffkhông tự giải thích được, ngay cả khi người cam kết tin là như vậy.
cowlinator

26

Và nếu bạn thêm một bí danh cho nó thì nó thậm chí còn tốt hơn phải không?

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'

Bây giờ bạn chỉ cần thực hiện một nccommit, nc vì không có bình luận, và mọi thứ sẽ được cam kết.


19

Khi làm việc trên một bản cập nhật mã quan trọng, nếu bạn thực sự cần một điểm an toàn trung gian, bạn có thể thực hiện:

git commit -am'.'

hoặc ngắn hơn:

git commit -am.

Và điều đó làm gì?
fishinear,

Thêm cam kết với tin nhắn '.'
Lackadaisical

Tôi sử dụng phương pháp này khi tôi thực sự không nhớ gì về những gì tôi đã đặt trong một cam kết và quá lười biếng với difftất cả.
TheTechRobo36414519

16

Lưu ý: bắt đầu từ git1.8.3.2 (tháng 7 năm 2013), lệnh sau ( được đề cập ở trên bởi Jeremy W Sherman ) sẽ không mở trình chỉnh sửa nữa:

git commit --allow-empty-message -m ''

Xem cam kết 25206778aac776fc6cc4887653fdae476c7a9b5a :

Nếu một thông báo trống được chỉ định với tùy chọn -mgit commit thì trình chỉnh sửa sẽ bắt đầu.
Đó là điều bất ngờ và không cần thiết.
Thay vì sử dụng độ dài của chuỗi thông báo để kiểm tra xem người dùng có chỉ định hay không, hãy trực tiếp ghi nhớ xem tùy chọn -mđã được cung cấp hay chưa.


git 2.9 (tháng 6 năm 2016) cải thiện hành vi thông báo trống:

Xem cam kết 178e814 (06/04/2016) bởi Adam Dinwoodie ( me-and) .
Xem cam kết 27014cb (07/04/2016) bởi Jeff King ( peff) .
(Merged bởi Junio C Hamano - gitster- trong phạm 0.709.261 , ngày 22 tháng 4 năm 2016)

commit: không bỏ qua một tin nhắn trống rỗng do -m ''

  • " git commit --amend -m '' --allow-empty-message", mặc dù có vẻ lạ, nhưng là một yêu cầu hợp lệ để sửa đổi cam kết không có thông báo nào cả.
    Do phát hiện sai sự hiện diện của-m trên dòng lệnh, chúng tôi đã kết thúc việc giữ bản ghi nhật ký từ cam kết ban đầu.
  • " git commit -m "$msg" -F file" nên bị từ chối cho dù có phải $msglà một chuỗi trống hay không, nhưng do cùng một lỗi, không bị từ chối khi$msg trống.
  • " git -c template=file -m "$msg"" nên bỏ qua mẫu ngay cả khi $msgtrống, nhưng nó đã không sử dụng nội dung từ tệp mẫu.

3

Bạn không cần git để thực hiện điều này. Sử dụng sáng tạo một hàm bash sẽ rất tốt. Nếu bạn không quan tâm đến tin nhắn, chỉ cần đặt một tin nhắn mặc định và quên nó đi.

function gitcom() {
  git commit -m "my default commit message"
}

Nếu bạn cảm thấy thực sự mạo hiểm, bạn có thể thêm, cam kết và đẩy bằng một lệnh

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}

Mà sau đó bạn sẽ chạy như

gitzap origin master

Bạn thậm chí có thể tìm hiểu sâu hơn và sử dụng parse_git_branch để lưu cho mình một số lần gõ phím ở đó hoặc đặt mặc định chung là "origin" và "master".


1
Bạn có thể cung cấp thêm một số chi tiết về cách thiết lập hàm bash này không?
adaam

1
Giả sử bạn đang sử dụng OSX hoặc Linux, bạn có thể sao chép các chức năng này và đặt chúng trong tệp .profile của mình (phải nằm trong thư mục chính của bạn, nếu không thì hãy tạo nó). Mở một cửa sổ bảng điều khiển mới và các lệnh đó sẽ có sẵn cho bạn. Bất kỳ thay đổi nào được thực hiện đối với các tệp này sẽ yêu cầu bạn làm mới phiên bash để bạn có thể tăng tốc mọi thứ bằng cách thêm các bí danh sau vào tệp đó: alias ea = "subl ~ / .profile" # subl là trình soạn thảo văn bản của tôi, thay thế bằng bí danh của riêng bạn alias er = "nguồn ~ / .profile" # này sẽ thiết lập lại Bây giờ khi bạn muốn thêm phím tắt mà bạn chỉ cần gõ "ea" (chỉnh sửa bí danh) Và để làm mới er
Steven Garcia

2
Nếu bạn gọi là kịch bản git-comgit-zap(không có phần mở rộng) và đặt chúng ở đâu đó git thể tìm thấy chúng (tức là ở đâu đó trong PATH của bạn), xử lý git họ như lệnh git thường xuyên và bạn có thể gọi họ như thế này: git com,git zap origin master
Manuzor

1
trong bash nó là một trong hai function gitcom {hoặc gitcom() {TMK, sửa chữa?

2

Git yêu cầu một cam kết phải có một bình luận, nếu không nó sẽ không chấp nhận cam kết.

Bạn có thể định cấu hình một mẫu mặc định với git làm thông báo cam kết mặc định của mình hoặc có thể tra cứu cờ --allow-rỗng-message trong git. Tôi nghĩ (không chắc chắn 100%) bạn có thể định cấu hình lại git để chấp nhận các thông báo cam kết trống (đó không phải là một ý kiến ​​hay). Thông thường mỗi lần cam kết phải là một công việc được mô tả bằng thông điệp của bạn.


1
Không chắc tại sao câu trả lời này bị bỏ phiếu thấp. Tôi đồng ý rằng buộc Git chấp nhận các thông báo cam kết trống hoặc sử dụng một thông báo như 'lưu', là một ý tưởng tồi. Đừng chống lại nó, và chỉ cần học công cụ chết tiệt.
Jezen Thomas

1

Tôi đã tìm thấy giải pháp đơn giản nhất:

git commit -am'save'

Đó là tất cả, bạn sẽ làm việc xung quanh nội dung tin nhắn cam kết git.

bạn thậm chí có thể lưu lời khen đó vào mục bash hoặc những thứ khác để làm cho nó đơn giản hơn.

Các thành viên trong nhóm của chúng tôi luôn viết những thông điệp đó, nhưng hầu như sẽ không ai nhìn thấy những thông điệp đó nữa.

Thông điệp cam kết là một thứ giết thời gian ít nhất trong nhóm của chúng tôi, vì vậy chúng tôi bỏ qua nó.


1

Tôi có cấu hình sau trong dự án riêng tư của mình:

git config alias.auto 'commit -a -m "changes made from [device name]"'

Bằng cách đó, khi tôi đang vội, tôi sẽ

git auto
git push

Và ít nhất tôi biết bản cam kết được thực hiện từ thiết bị nào.


-5

Thông báo cam kết là một phương pháp hay nhất mà bạn nên tuân thủ mọi lúc. Trừ khi bạn là nhà phát triển duy nhất và điều đó sẽ không sớm thay đổi.

git commit -a -m 'asdfasdfadsfsdf'

đó là một trò đùa. Nhưng đối với những cam kết nhỏ mà bạn PHẢI thực hiện để gửi các thay đổi cho heroku (ví dụ), thì điều đó không sao cả trong trường hợp nhà phát triển duy nhất.
coloradoblue
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.