Hủy cam kết do thông báo cam kết trống


81

Là một người dùng git mới, khi tôi cố gắng cam kết công việc của mình với

git commit -a -v

và tôi nhập thông báo cam kết vào trình chỉnh sửa của mình, tôi đóng tệp và gặp lỗi sau:

Aborting commit due to empty commit message.

Tôi đã đọc gần như tất cả các chủ đề liên quan đến vấn đề này, đã thay đổi biên tập viên, về cơ bản đã thử mọi thứ nhưng không có gì hữu ích. Tôi nên làm gì?

Một điều tôi nhận thấy, trong khi thử toàn bộ quá trình với notepad ++, tệp không thể được lưu.

Một giải pháp khả thi là:

git commit -am "SomeComment"

Nhưng làm như vậy tôi cảm thấy mình đang vô hiệu hóa mục đích của việc sử dụng git. Tôi muốn ghi lại các thay đổi của mình một cách chính xác.


Bạn đang sử dụng phiên bản git cho windows nào?
Josh Lee

3
Điều vô hiệu duy nhất ở đây là không nhập một thông báo cam kết có liên quan. git commit -am "SomeRelevantComment"
NickSuperb

Bạn gặp lỗi gì khi cố gắng lưu tệp từ trình chỉnh sửa của mình?
Karl Bielefeldt

Tôi đã gặp sự cố đó trên Windows 7, trong khi làm việc trên các tệp trong `C: \ Program Files`. Windows 7 bảo vệ chống lại việc ghi trong thư mục này (và bất kỳ nơi nào bên dưới), và vì tệp tạm thời (COMMIT_MSG hoặc thứ gì đó) nơi bạn viết thông báo cam kết của mình được tạo trong thư mục .git, nên đã không thành công.
Gauthier

"tài liệu"? Hmm ...
Patrick

Câu trả lời:


138

Khi bạn đặt một trình chỉnh sửa trong cấu hình của Git, hãy đảm bảo chuyển tham số "-w" để buộc Git đợi thông báo cam kết mà bạn sẽ nhập vào trình chỉnh sửa tùy chỉnh của mình.

git config --global core.editor "[your editor] -w"

1
Samesies trên văn bản siêu phàm 2. Đã thử một loạt các công cụ khác, đây là lần đầu tiên có hiệu quả. Cảm ơn Zak.
Scott Silvi

Đã sửa lỗi cho tôi bằng cách sử dụng sublime text 2, hoặc gedit, làm thử nghiệm.

Sublime Text 3: -w BÊN TRONG các trích dẫn, thiên tài. tôi đã bối rối khi sử dụng nó bên ngoài dấu ngoặc kép, như tôi đã thấy trong nhiều diễn đàn và ví dụ khác.
danjah

7
Đối với macvim, hãy sử dụng mvim -fthay vì -wcờ.
nishanthshanmugham 14/09/15

1
Có vẻ như đôi khi có một lỗi khi bạn sử dụng phiên bản gedit hiện có để đặt thông báo cam kết, vì vậy không "gedit -w"hiệu quả với tôi, nhưng "gedit -s"hoặc "gedit --standalone"hoạt động.
jfv

42

Lỗi này có thể xảy ra nếu nhận xét cam kết của bạn là một dòng bắt đầu bằng một #ký tự. Ví dụ: tôi gặp lỗi này khi kết thúc với những điều sau trong cửa sổ soạn thảo tin nhắn cam kết của mình:

#122143980 - My commit message was here. The number to the left is a Pivotal Tracker story/ticket number that I was attempting to reference in the commit message.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch [MYBRANCH]
# Your branch is up-to-date with 'origin/[MYBRANCH]'.
#
# Changes to be committed:
#   modified:   [MYFILE1]
#   modified:   [MYFILE2]
#

Tất nhiên, vấn đề là thông điệp cam kết của tôi bắt đầu bằng một #ký tự, vì vậy git đã xem dòng đó như một nhận xét, và do đó, thông báo cam kết bị trống, vì nó không có gì ngoài nhận xét!

Cách khắc phục là bắt đầu thông báo cam kết của tôi bằng một ký tự khác #.

Trong trường hợp cụ thể của tôi, việc đặt Pivotal ID trong dấu ngoặc vuông làm cho cả git và Pivotal hài lòng:

[#122143980] My commit message here. 

3
GitLab có cùng một cú pháp cho các vấn đề, tôi đã sử dụng để thêm tiền tố cho các thông báo cam kết của mình với số nhận dạng vấn đề và đây là một vấn đề, việc tiếp thị số vấn đề cũng hoạt động tốt với GitLab.
Chơi bạc

2
Huh, tuyệt vời, bạn đã đóng đinh nó! Nó khiến tôi gặp rắc rối nhưng tôi thấy tôi đã thực sự bắt đầu cam kết với số phát hành GitHub #xxxx Fixed: ...và việc thay đổi số này thành Fixed #xxxx: ...thực sự đã khắc phục được nó. Cảm ơn bạn.
Slartibartfast

Tôi đã tham khảo sự cố github bằng cách sử dụng #123 some message. hoạt động trong khi cam kết, nhưng không thành công sau đó khi giới thiệu rebasequa trình chỉnh sửa.
Stafford Williams

20

Đối với mã Visual studio

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

Đối với nguyên tử

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

Cho sự siêu phàm

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

1
Thể muốn kiểm tra sự khác biệt giữa hai phương pháp đầu tiên của bạn
mcalex

Và làm thế nào để bạn quay lại cài đặt ban đầu? Hoặc làm thế nào để bạn đọc cài đặt hiện tại?
Tim

8

Nếu bạn muốn cam kết với một tài liệu thích hợp (dài, nhận xét nhiều dòng), nhưng không muốn -mtùy chọn này, những gì bạn có thể làm (và điều tôi làm khi chuẩn bị cam kết của mình ) là:

  • viết tài liệu của bạn (trong khi bạn đang thực hiện các thay đổi) trong một tệp riêng biệt 'doc-commit' (hoặc bất kỳ tên nào bạn muốn gọi nó)
  • cam kết với một ' git commit -a -F /path/to/doc-commit')

Tóm lại, hãy sử dụng một tệp riêng biệt (có thể ở bất kỳ đường dẫn nào bạn muốn) làm thông điệp cam kết của bạn.


Tôi có thể đưa ra nhận xét trong tệp đó ( # my comment) không?
borisdiakur

@Lego Tôi nghi ngờ như vậy (chưa thử nghiệm trực tiếp, nhưng nó sẽ lấy toàn bộ nội dung của tệp văn bản của bạn làm thông báo cam kết.
VonC

Tôi vừa thử: Nhận xét của tôi được coi là một phần của tin nhắn, vì vậy có vẻ như không thể có nhận xét trong tệp văn bản. Dù sao, tôi thích quá trình ghi lại các thay đổi trong một tệp doc-cam kết riêng biệt trong khi làm việc với một nhiệm vụ. Vì vậy - cảm ơn!
borisdiakur

8

Tôi cũng là một người mới trong Git. Tôi gặp phải vấn đề về cơ bản giống như của bạn. Tôi đã giải quyết vấn đề này bằng cách nhập:

git commit -a -m 'some message'

Lý do là git không cho phép cam kết mà không có tin nhắn. Bạn phải liên kết một số thông báo với lệnh cam kết của mình.


5

Tôi đang gặp vấn đề này. Tôi vừa mới cài đặt 1.8.0 trước đó và tôi thấy mình phải sửa đổi một chút ở trên. Tôi rất mới về tất cả những điều này, nhưng về cơ bản có vẻ như khi cam kết, nó sẽ sử dụng content.editor, không phải core.editor, ít nhất là nếu bạn có một cái gì đó được đặt cho content.editor.

Vì vậy, nó đã

git config --global content.editor "pico -w"

điều đó cuối cùng hãy để tôi cam kết! Tất nhiên, hãy sử dụng bất kỳ trình soạn thảo nào bạn sử dụng.

Hy vọng điều này sẽ giúp ai đó một ngày nào đó!


5

Git không cho phép cam kết mà không có thông báo được chỉ định. Bạn đã chỉ định thông báo cam kết trong hộp thoại cam kết chưa?

Lưu ý rằng các dòng bắt đầu bằng # được Git coi là bình luận và không được coi là bình luận và bị Git bỏ qua.


5

Trước tiên, hãy xóa các mục cũ của người biên tập:

git config --global --unset-all core.editor
git config  --unset-all core.editor

Đặt trình chỉnh sửa của bạn:

  • Đối với Notepad ++

    git config --global core.editor "Notepad++ -w"
    git config core.editor "Notepad++ -w"
    
  • Cho sự siêu phàm

    git config --global core.editor "Notepad++ -w"
    git config core.editor "subl -w"
    

4

Tôi đã định cấu hình trình soạn thảo nguyên tử của mình là

git config --global core.editor "atom --wait"

nhưng khi tôi đã làm

git commit

Khi atom đã được khởi chạy, nó đã mở một tab mới để thêm nhận xét, nhưng git không đợi tôi lưu tệp và gửi thông báo "Hủy bỏ" ngay lập tức. Khi tôi đóng nguyên tử và cố gắng cam kết thêm một lần nữa, git khởi chạy nguyên tử và chờ nhận xét được thêm vào.


4

Trên máy windows dành cho trình soạn thảo 'Sublime', chúng ta cũng có thể thêm dòng sau vào tệp .gitconfig trong thư mục sau [THƯ DRIVE CỦA BẠN]: / users / username /

[core]
  editor = '[YOUR DRIVE LETTER]:/Program Files/Sublime Text [YOUR VERSION NUMBER]/sublime_text.exe' --wait

Hy vọng nó giúp.


Đối với tôi, điều này tạo ra một tệp có tên --wait. Bạn có một ví dụ làm việc trong đó đường dẫn đến tệp bao gồm khoảng trắng, như trong Program Fileskhông? Cảm ơn.
zx81

2

Nó mong đợi một thông báo cam kết.

Đối với vim : (Tôi cũng là người mới. Tôi chỉ làm việc với vim cho đến nay)

Sau lệnh của bạn,

git commit -v

Bạn sẽ được chuyển hướng đến một tệp có tên

".git / COMMIT_EDITMSG"

Điều đó mở ra trong trình chỉnh sửa của bạn (trong trường hợp của tôi là vim)

Bạn sẽ tìm thấy rất nhiều văn bản được nhận xét giống hệt như những gì bạn đã thấy khi làm

git status  OR
git diff

Nếu để ý, bạn có thể thấy một dòng trống trên đầu - nơi nó mong đợi một thông báo cam kết. Bạn có thể nhập thông báo cam kết tại đây và lưu và thoát khỏi trình chỉnh sửa. Xong rôi!


hoàn hảo !!! Tôi biết sẽ có một giải pháp đơn giản
Scott Stensland

2
git config --global core.editor "subl -w" -F 

Điều này đã giúp tôi sau rất nhiều lần thử và sai, hy vọng ai đó thấy nó hữu ích.

Tôi đã có liên kết biểu tượng sublime 3 để sử dụng làm lệnh subl.

Tôi hoàn toàn không biết lý do tại sao cờ -F bên ngoài "" hoạt động.


1
Tôi không cần cờ -F; -w là đủ. -w nói với Sublime là "Chờ các tệp được đóng trước khi quay lại" (từ subl --help).
Galen Long

1

Đảm bảo viết hoa W chắc chắn.

git config --global core.editor "open -a 'Sublime Text 2' -W"

hoặc sử dụng lệnh sau để thay thế lệnh hiện có không hoạt động bình thường.

git config --replace-all core.editor "open -a 'Sublime Text 2' -W"


1

Để nhận xét về Notepad ++ (Windows), hãy làm như sau:

1. Tạo một tệp loạt ở đâu đó (ví dụ: c: \ Users \ me \ scripts \ npp.bat)
Viết tệp này vào tệp lô (tùy thuộc vào nơi Notepad ++ của bạn được cài đặt):

"C:\Program Files\Notepad++\notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"

2. Lưu tệp hàng loạt.
3. Mở .gitconfig (thường nằm trong thư mục Người dùng Windows của bạn) và đảm bảo rằng
trong phần [core] bạn có:

editor = '"c:\\Users\\me\\scripts\\npp.bat"'

Hoặc chạy:

git config --global core.editor '"c:\Users\me\scripts\npp.bat"'

4. Bây giờ thực hiện commit nào đó, và nó sẽ mở Notepad ++, git commit bây giờ sẽ đợi cho đến khi cửa sổ notepad ++ đóng lại.


1

Để bắt đầu, hãy đảm bảo git của bạn được định cấu hình chính xác để mở một số loại lời nhắc trình chỉnh sửa (visual studio / sublime / notepad ++ / atom, v.v.) để tiếp tục.

  • Đối với trường hợp của tôi, tôi đã định cấu hình git của mình để sử dụng visual studio trong môi trường Ubuntu.
  • Tôi đã thử thực hiện một thay đổi, nó không thành công với thất bại nhất định.
  • Sau đó, tôi xem .gitconfigtệp của mình và phát hiện ra rằng trình chỉnh sửa của tôi bị thiếu -wtham số
  • Tôi chạy git config --global core.editor "code -w"lệnh và kiểm tra lại .gitconfigtệp của mình , nhận thấy tệp -wđã được thêm vào đó một cách chính xác.
  • Đã thử cam kết thay đổi một lần nữa và nó đã hiệu quả với tôi.

Hy vọng điều này sẽ giúp ích cho một số người mới khác như tôi.


0

Tôi đã khắc phục sự cố bằng cách chuyển từ trình chỉnh sửa MacVim ưa thích của mình, mở một cửa sổ mới, sang vim mặc định tiêu chuẩn trong / user / bin / vim, mở trong cùng một cửa sổ với shell từ khi nó được gọi và điều đó dường như đã được khắc phục vấn đề.


1
bạn chỉ cần thêm cờ -f ví dụgit config --global core.editor "mvim -f"
Ilias Karim

0

Tôi gặp sự cố này và phát hiện ra rằng nếu tôi không đưa ra bất kỳ nhận xét nào sau khi cam kết, nó sẽ dẫn đến lỗi đó cho tôi. Nếu tôi quay trở lại phần bash chính ngay lập tức, nó không cam kết. Chỉ cần nói rõ hơn, tôi đang sử dụng GIT Bash, không phải trình soạn thảo khác


0

Khi tôi sử dụng đường dẫn tệp nguyên tử hoàn chỉnh, nó không hoạt động, vì vậy thay vì sử dụng:

git config --global core.editor "c:/programs/atom/atom.exe -w"

Tôi đã sử dụng:

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

và nó hoạt động tốt. Chúc may mắn!

QUAN TRỌNG: Trước tiên hãy đảm bảo rằng nguyên tử đó bắt đầu gọi nó một cách chính xác trực tiếp (nguyên tử) từ dòng lệnh bạn đang sử dụng.


0

giải pháp cho lỗi cam kết

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

Như tôi đã trình bày ở trên, có một trường cam kết mà bạn cần phải nhập trong khi cam kết, đây về cơ bản là để kiểm soát phiên bản và hiểu các thay đổi cho mỗi cam kết.

Nếu bạn không nhập, bạn sẽ gặp lỗi: Hủy cam kết do thông báo cam kết trống

Lưu ý: các thao tác trên chỉ hoạt động trong Rstudio cam kết và kéo các tệp.


0

Tôi đã gặp lỗi này và mặc dù tôi đã sử dụng git config --global core.editor "code -w", nó vẫn không đợi tôi đóng tệp. Nó sẽ hủy bỏ ngay lập tức.

Vấn đề của tôi là tôi đã chạy lệnh này trước đó git config core.editor "code".

Có vẻ như core.editor(mà tôi cho là đặc tả thư mục làm việc cục bộ), được ưu tiên hơn --global core.editor.

Nếu git config --global core.editor "code -w"(hoặc bất kỳ trình soạn thảo nào bạn đang cố gắng sử dụng) không phù hợp với bạn, hãy thử bỏ qua --global.

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.