2008-09-13 4 views
85

Во всех учебниках Git я читал, они говорят, что вы можете сделать:Git commit открывает пустой текстовый файл, для чего?

git init 
git add . 
git commit 

Когда я делаю это я получаю большой текстовый файл открыт. Кажется, что ни одна из этих обучающих программ не затрагивает это, поэтому я не знаю, что делать с файлом или что ему нужно вставить.

ответ

4

Команда git commit откроет редактор, указанный в переменной окружения EDITOR, чтобы вы могли ввести комментарий фиксации. В системе Linux или BSD по умолчанию это должно быть vi, хотя любой редактор должен работать.

Просто введите ваши комментарии и сохраните файл.

12

-m возможности фиксации позволяет ввести сообщение фиксации в командной строке:

git commit -m "my first commit" 
37

Текстового файл, который открывается представляет собой резюме тока совершить операцию. Git commit переносит вас в этот файл, чтобы вы могли добавить сообщение фиксации в верхней части файла. После того, как вы добавили свое сообщение, просто сохраните и выйдите из этого файла.

В этой команде есть также переключатель «-m msg», который позволяет добавить сообщение фиксации в командной строке.

+0

Привет Лу, я тоже новичок на GIT. Я думаю, что после того, как я существовал или писал и существовал текстовый файл, git фактически не передавал сообщение о стадии и сообщение о коммитации, которое я только что написал. Итак, в чем смысл добавления сообщения в этот текстовый файл, если я не могу сделать фиксацию после записи и выйти из нее. (пожалуйста, поправьте меня, если я ошибаюсь, большое спасибо) – SLN 2016-11-23 19:17:28

+0

@SLN Сценарий, который вы излагаете, не очень ясен. Я собираюсь угадать и предположить, что, возможно, вы не поставили файл для фиксации, поэтому ваша попытка фиксации ничего не сделала. Используйте «git add» для файлов первой стадии, которые вы хотите зафиксировать, затем «git commit» для выполнения фактического фиксации. – Lou 2016-11-29 04:39:13

2

При выполнении контроля версий вы всегда должны объяснять, что вы изменили. Обычно в первый раз у вас есть комментарий, такой как «Начальная фиксация».

Однако в конечном итоге вы хотите сделать хороший комментарий для каждой фиксации. Вам нужно что-то вроде формы:

Добавлена ​​экспериментальная особенность x.

X увеличит производительность признака Y в состоянии Z. Если вы потребность X активировать его с -x или --feature-ЭКС переключателей. Это указывает на запрос функции # 1138.

63

Как отметил Ben Collins, без -m "..." аргумента к типу совершения инлайн (который, как правило, плохая идея, поскольку она поощряет вас быть кратким), это «большой текстовый файл», который открывается вверх является окно который набирает сообщение фиксации.

Обычно рекомендуется написать резюме в первой строке, пропустить строку, а затем написать более подробные заметки внизу; это помогает программам, которые делают такие вещи, как электронная почта, сообщения фиксации с соответствующей строкой темы и полный список изменений, сделанных в теле.

Вместо изменения оболочки переменной EDITOR, вы можете также изменить редактор, используемый путем добавления дополнительных строк в вашем ~/.gitconfig файле:

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

Эта вторая линия на самом деле не имеет ничего общего с вашей проблемой, но я находят это действительно полезным, поэтому я могу заполнить свой файл ~/.gitignore со всеми этими типами файлов. know Я никогда не захочу совершать репозиторий.

3

Да, убедитесь, что у вас есть разумный набор редакторов.Не уверен, что вы будете использовать редактор по умолчанию, но если, как и я, это nano (скажем, где-то около вершины после ввода текста), вам просто нужно ввести комментарий, а затем нажать Ctrl-x для завершения. Затем нажмите y, затем введите, чтобы подтвердить фиксацию.

Кроме того, если вы хотите, чтобы увидеть простой список файлов, которые вы будете совершающих, а не огромный дифф листинг заранее попробовать

git diff --name-only
12

Как все говорят, что это именно там, где вы добавить свой комментарий совершить - но для некоторых это может все еще запутать esp, если вы не настроили настройки вашего редактора, и вы не знаете, что такое VI: тогда вы можете быть в шоке, потому что вы будете думать, что вы все еще в GIT-Bash

В этом случае вы на самом деле находитесь в текстовом редакторе с интересными способами борьбы с вещами и this set of commands может помочь вам, чтобы вы могли пройти мимо своего первого коммита, а затем настроить редактор, с которым вы знакомы, или использовать его в качестве возможности узнать, как его использовать.

+8

Я знаю, что в конечном итоге в vi всегда шокирует меня :) – 2009-07-03 03:42:51

+1

Теперь все становится понятным. +1 – 2010-06-07 09:06:54

115

Вы должны разместить сообщение фиксации в этом текстовом файле, а затем сохранить и выйти.

Вы можете изменить обычный текстовый редактор, который мерзавец использует с этой командой:

git config --global core.editor "nano" 

Вы должны изменить Нано любой команды, как правило, открыть текстовый редактор.

+0

или `git config core.editor" mcedit "` – sorin 2010-03-04 18:04:23

+14

или `git config core.editor vi`;) – 2011-08-16 15:01:11

+11

или что мне нравится:` git config core.editor 'emacs -nw "`;;)) – Kee 2011-10-18 14:59:58

0

Следующая, вероятно, самый простой способ совершить все изменения:

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

Конечно, есть гораздо более детальные способы совершения, но это должно вам начать работу.

14

Если вы на Mac OS X и с помощью BBEdit, вы можете установить это в качестве редактора выбора для фиксации сообщений:

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

После завершения редактирования, сохраните и закройте файл и мерзавец будет использовать это для комментариев.

6

Попробуйте Escape, затем ZZ, после того, как вы закончите вводить свое сообщение. Как говорили другие, когда вы запускаете эту команду commit, она фактически запускает текстовый редактор для ввода сообщения. В моем случае (OS X) это был VI, который я выяснил после некоторого рытья. В этом случае нажмите Escape, чтобы перейти в режим «команда» (в отличие от режима INSERT), введите ZZ. Я уверен, что есть другие способы решения задачи, но это было для меня. Никогда не использовал VI или emacs, это было не очевидно для меня и не упоминалось ни в одном из новичков, которые я использовал. Надеюсь, это поможет.

2

Я был смущен, потому что продолжал пытаться ввести имя файла после: w в VIM. Это не вызывает фиксацию. Вместо этого я продолжал получать сообщение «Прерывание фиксации из-за сообщения о пустой фиксации». Не указывайте имя файла после: w. : w сохраняет файл в .git/COMMIT_EDITMSG по умолчанию. Затем: q для выхода, чтобы завершить фиксацию. Вы можете увидеть результаты с помощью git log.

1

Будучи новым для терминала, «Escape, а затем ZZ» работал на меня, у меня была эта проблема в течение нескольких месяцев, а также не удалось найти способ обойти ее.

Спасибо TheGeoff за ваш простой совет!

2

Теперь, когда я изменил свой редактор на emacs, все работает нормально.

Но прежде, чем я установил это, «git commit -a» открыл gedit, но также сразу же закончил «Прерывание фиксации из-за сообщения о пустой фиксации». Сохранение файла из gedit не повлияло. Явное назначение редактора с помощью «git config -global core.editor» gedit »имело тот же результат.

Нет ничего плохого в emacs, но из любопытства, почему это не работает с gedit, и есть ли способ заставить его работать?

Спасибо.

15

Предполагая, что ваш редактор по умолчанию Vi/Vim, вы можете выйти из коммита редактор сообщений, набрав:

:x 

, который будет сохранять и выйти из файла коммита. Затем вы вернетесь в нормальную командную команду git.

Больше VI команды:
http://www.lagmonster.org/docs/vi.html

2

Для тех, кто использует OS XI нашел эту команду, чтобы хорошо работать:
git config --global core.editor "open -t -W"

который заставит ублюдка открыть текстовый редактор (TextEdit в моем случае), а затем дождитесь, когда вы выйдете из приложения. Имейте в виду, что вам нужно «Сохранить», а затем «Завершить» textedit до того, как произойдет коммит. Есть несколько других команд, которые Вы можете играть вокруг с подробными на этой странице:

Apple Developer Library - Open Command

Вы также можете попробовать git config --global core.editor "open -e -W" если вы хотите мерзавец всегда открыт TextEdit, независимо от того, что редактор по умолчанию.

7

Когда вы создаете новый коммит, git запускает текстовый редактор и записывает в него некоторые вещи.

Используя этот текстовый редактор, вы намерены написать сообщение о фиксации, которое будет связано с вашей созданной фикцией.

После того, как вы закончили это, сохраните и выйдите из текстового редактора. Git будет использовать то, что вы написали, как сообщение фиксации.

сообщение фиксации имеет определенную структуру, описывается следующим образом:

Первая строка сообщения фиксации используется в качестве заголовка сообщения (или название). Предпочитаемая длина заголовка фиксации составляет менее 40 символов, так как это количество символов, которое github отображает на вкладке Commits данного репозитория, прежде чем обрезать его, что некоторые люди считают раздражающим.

При составлении заголовка с использованием заглавного, настоящего времени глагола для первого слова является обычной практикой, хотя это и вовсе не требуется.

Одна новая строка определяет заголовок и тело сообщения.

Тело может содержать все, что угодно. Обзор изменений, внесенных вашей фиксацией, является разумным.Некоторые сторонние приложения используют информацию, включающую тело сообщений фиксации, чтобы устанавливать различные виды перехватов (я думаю, что Gerrit и Pivotal Tracker, чтобы назвать два).

Вот короткий и сладкий пример. Ведущим # является комментарий.

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 
# 

Here один г-н Торвальдс полагает на то, что делает хороший совершить.

И here Tpope делает то же самое.

Как указано в нескольких других ответах, изменение редактора по умолчанию является однострочным в командной строке.

Для моего предпочтения:

git config --global core.editor "vim" 
Смежные вопросы