Git commit открывает пустой текстовый файл, для чего?


93

Во всех руководствах по Git, которые я читал, говорится, что вы можете:

git init
git add .
git commit

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

Ответы:


124

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

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

git config --global core.editor "nano"

Вы должны изменить nano на любую команду, которая обычно открывает ваш текстовый редактор.


15
Разве вам не нужно добавлять, --globalчтобы изменить значение по умолчанию?
Znarkus

4
@Znarkus - хорошее замечание. См. Здесь для получения дополнительной информации. По сути, данный ответ изменит только настройку для текущего проекта, тогда как --globalизменит его для текущего пользователя и --systemизменит его для всех на этом компьютере.
Мэтт Фенвик,

24
Хотя этот ответ содержит хорошую информацию, он не касается самого вопроса.
Адриан Шмидт

5
Я не понимаю, почему это удвоило количество голосов, поскольку некоторые ответы ДЕЙСТВИТЕЛЬНО отвечают на вопрос. Это не так.
Johan

2
@Johan, Вы не ошиблись, но, наткнувшись на это, я нашел этот ответ чрезвычайно полезным. Так что я проголосовал за это.
Danation

65

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

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

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

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

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


36

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

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


Привет, Лу, я тоже новичок в GIt. Я думаю, что после того, как я существую или пишу и существую текстовый файл, git на самом деле не фиксировал постановку и сообщение фиксации, которое я только что написал. Итак, какой смысл добавлять сообщение в этот текстовый файл, если я не могу выполнить фиксацию после записи и выхода из него. (пожалуйста, поправьте меня, если я ошибался, большое спасибо)
SLN

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

15

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

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

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


15

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

:x

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

Другие команды vi:
http://www.lagmonster.org/docs/vi.html


9
Если вы похожи на меня, вы были в режиме вставки / замены (т.е. набирали сообщение фиксации). Если это так, вам нужно будет нажать, escчтобы перейти в командный режим, прежде чем вводить :xдля сохранения и выхода.
Мартин Карни

1
При условии, конечно, что его редактор по умолчанию использует vi / vim. Это было бы верно не для всех. Конечно, не для этого пользователя emacs;)
haziz

Это избавило меня от многих проблем. Большое спасибо
Danation

12

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

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


8
Я знаю, что переход на vi всегда шокирует меня :)
Уилл Робертсон

1
Теперь все стало намного понятнее. +1
Мэтт Эллен

11

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

git commit -m "my first commit"

7

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

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

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

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

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

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

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

Тело может состоять из чего угодно. Обзор изменений, внесенных вашей фиксацией, является разумным. Некоторые сторонние приложения используют информацию, включенную в тело сообщений фиксации, чтобы активировать различные виды ловушек (я думаю, 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
#

Здесь некий мистер Торвальдс высказывает свое мнение о том, что делает хорошие обязательства.

И здесь Тпопе поступает так же.

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

На мой выбор:

git config --global core.editor "vim"

2
это должен быть принятый ответ на вопрос.
mppfiles 07

6

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


4

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

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


2

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


или вы можете просто использовать: x для сохранения и выхода.
TJ Ellis

2

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

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

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

Спасибо.


если gedit уже запущен, выполнение "gedit file.txt" откроет файл в существующем окне и немедленно вернет ... вы должны опубликовать это как фактический вопрос, особенно об использовании gedit с git.
araqnid

6
столкнулся с этим тоже. вы можете исправить это, установив gedit для работы в автономном режиме:git config --global core.editor "gedit -s"
brittohalloran

2

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

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

Библиотека разработчика Apple - команда открытия

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


1

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

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

git diff --name-only

1

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

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

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

X увеличит производительность функции Y в условии Z. Если вам нужно X, активируйте ее с помощью переключателей -x или --feature-eks. Это касается запроса функции № 1138.


1

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

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


0

Вероятно, самый простой способ зафиксировать все изменения:

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

Конечно, есть более подробные способы фиксации, но это должно помочь вам начать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.