Git commit відкриває порожній текстовий файл, для чого?


93

У всіх підручниках Git, які я читав, вони говорять, що ви можете зробити:

git init
git add .
git commit

Коли я це роблю, я відкриваю великий текстовий файл. Здається, жоден з підручників не стосується цього, тому я не знаю, що робити з файлом або що в нього помістити, якщо що.

Відповіді:


124

Ви маєте намір помістити повідомлення про коміт у цей текстовий файл, а потім зберегти та вийти.

Ви можете змінити текстовий редактор за замовчуванням, який git використовує за допомогою цієї команди:

git config --global core.editor "nano"

Вам потрібно змінити nano на будь-яку команду, яка зазвичай відкриває ваш текстовий редактор.


15
Вам не потрібно додавати, --globalщоб змінити значення за замовчуванням?
Знаркус

4
@Znarkus хороший момент. Дивіться тут для отримання додаткової інформації. По суті, дана відповідь змінить лише налаштування для поточного проекту, тоді як --globalзмінює його для поточного користувача та --systemзмінить його для всіх на цьому комп’ютері.
Метт Фенвік,

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

5
Я не розумію, чому це зросло вдвічі більше, ніж деякі з відповідей, які НАСТОЯЧО відповідають на питання. Це не так.
Йохан

2
@ Джохан, ти не помилився, але, натрапивши на це, я знайшов цю відповідь надзвичайно корисною. Тож я підтримав його.
Данування

65

Як згадував Бен Коллінз , без -m "..."аргументу вводити комміт вбудовано (що, як правило, погана ідея, оскільки спонукає вас бути коротким), цей "великий текстовий файл", який відкривається, є вікном, в якому можна ввести повідомлення коміту .

Зазвичай рекомендується написати резюме в першому рядку, пропустити рядок, а потім написати детальніші примітки внизу; це допомагає програмам, які виконують такі дії, як повідомлення електронної пошти про коміти, з відповідним рядком теми та повним переліком змін, внесених до основного тексту.

Замість того, щоб змінювати EDITORзмінну оболонки, ви також можете змінити використовуваний редактор, додавши додаткові рядки у ~/.gitconfigфайл:

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

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


36

Текстовий файл, який відкривається, є підсумком поточної операції коміту. Комітет git передає вас до цього файлу, щоб ви могли додати повідомлення про коміт у верхній частині файлу. Додавши повідомлення, просто збережіть і вийдіть із цього файлу.

На цій команді також є перемикач "-m msg", що дозволяє додавати повідомлення про коміт у командний рядок.


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

@SLN Сценарій, який ви окреслюєте, не дуже зрозумілий. Я збираюся здогадатися і припустити, що, можливо, ви не влаштували жодного файлу для фіксації, тому ваша спроба фіксації нічого не зробила. Використовуйте "git add" для файлів першої стадії, які ви хочете зафіксувати, а потім "git commit", щоб виконати власне фіксацію.
Лу

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щоб зберегти та вийти.
Martin Carney

1
Припускаючи, звичайно, що його редактор за замовчуванням vi / vim. Це було б не так для всіх. Звичайно, не для цього користувача emacs;)
haziz

Це врятувало мені багато клопоту. Щиро дякую
Данування

12

Як усі вже говорили, саме тут ви додаєте коментар до коміту, але для деяких це все одно може заплутати esp, якщо ви не налаштували параметри редактора, і ви не знаєте, що VI : тоді вас може шокувати , тому що ви будете думати, що ви все ще в GIT-Bash

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


8
Я знаю, що закінчення ві завжди мене шокує :)
Уілл Робертсон,

1
Зараз речі мають набагато більше сенсу. +1
Метт Еллен,

11

-mМожливість фіксації дозволяє ввести повідомлення фіксації в командному рядку:

git commit -m "my first commit"

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
#

Ось один містер Торвальдс висловлює думку про те, що робить хороший комітет.

І ось тут Тпопе робить те саме.

Як зазначалося в декількох інших відповідях, зміна редактора за замовчуванням є однорядковою в командному рядку.

На мою перевагу:

git config --global core.editor "vim"

2
це має бути прийнятою відповіддю на запитання.
mppfiles

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 XI, ця команда добре працює:
git config --global core.editor "open -t -W"

що змусить git відкрити текстовий редактор за замовчуванням (у моєму випадку textedit), а потім почекати, поки ви вийдете з програми. Майте на увазі, що вам потрібно "Зберегти", а потім "Вийти" textedit перед тим, як буде здійснено фіксацію. Є кілька інших команд, з якими можна пограти, як описано на цій сторінці:

Бібліотека розробника Apple - Відкрита команда

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


1

Так, переконайтеся, що у вас є розумний набір редакторів. Не впевнений, яким ви будете редактором за замовчуванням, але якщо, як і я, це нано (скаже десь вгорі після введення коміту), вам просто потрібно ввести коментар, а потім натиснути Ctrl-x, щоб закінчити. Потім натисніть y, а потім Enter, щоб підтвердити коміт.

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

git diff --name-only

1

Виконуючи контроль версій, ви завжди повинні пояснювати, які зміни ви зробили. Зазвичай ви вперше отримуєте коментар типу "Початкове комітування".

Однак у довгостроковій перспективі ви хочете зробити хороший коментар до кожного коміту. Вам знадобиться щось у формі:

Додана експериментальна функція x.

X збільшить продуктивність функції Y за умови Z. Якщо вам знадобиться X, активуйте її за допомогою перемикачів -x або --feature-eks. Це адреси запиту функції # 1138.


1

Будучи також новим у Terminal, "Escape, а потім ZZ" працював на мене, у мене ця проблема виникла місяцями, і я також не міг її обійти.

Дякую TheGeoff за вашу просту пораду!


0

Нижче наведено, мабуть, найпростіший спосіб здійснити всі зміни:

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

Звичайно, є набагато детальніші способи вчинення, але це повинно допомогти вам почати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.