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.