Git
совершение
Поиск…
Вступление
Обязательства с Git обеспечивают подотчетность, приписывая авторов изменениям кода. Git предлагает несколько функций для специфики и безопасности транзакций. В этом разделе объясняются и демонстрируются правильные методы и процедуры, связанные с Git.
Синтаксис
- git commit [flags]
параметры
параметр | подробности |
---|---|
--message, -m | Сообщение для включения в коммит. Указание этого параметра обходит обычное поведение Git при открытии редактора. |
--amend | Укажите, что изменения, которые в настоящее время выполняются, должны быть добавлены (изменены) к предыдущему фиксации. Будьте осторожны, это может переписать историю! |
--no-редактировать | Используйте выбранное сообщение фиксации без запуска редактора. Например, git commit --amend --no-edit вносит изменения в коммит без изменения сообщения о фиксации. |
-all, -a | Зафиксируйте все изменения, включая изменения, которые еще не поставлены. |
--Дата | Вручную установите дату, которая будет связана с фиксацией. |
--только | Зафиксируйте только указанные пути. Это не приведет к тому, что вы в настоящее время поставили, если не сказали об этом. |
--patch, -p | Используйте интерактивный интерфейс выбора патчей для выбора изменений для фиксации. |
--Помогите | Отображает страницу man для git commit |
-S [keyid], -S --gpg-sign [= keyid], -S --no-gpg-sign | Sign commit, фиксация GPG-знака, переменная конфигурации countermand commit.gpgSign |
-n, --no-verify | Этот параметр обходит крючки pre-commit и commit-msg. См. Также Крючки |
Выполнение без открытия редактора
Обычно Git обычно открывает редактор (например, vim
или emacs
), когда вы запускаете git commit
. Передайте параметр -m
для указания сообщения из командной строки:
git commit -m "Commit message here"
Ваше сообщение фиксации может проходить через несколько строк:
git commit -m "Commit 'subject line' message here
More detailed description follows here (after a blank line)."
Кроме того, вы можете передать несколько аргументов -m
:
git commit -m "Commit summary" -m "More detailed description follows here"
См. Как написать сообщение Git Commit .
Руководство по стилю сообщения об уродстве Git
Изменение коммита
Если ваша последняя фиксация еще не опубликована (не помещена в репозиторий восходящего потока), вы можете изменить свое сообщение.
git commit --amend
Это поместит текущие поэтапные изменения в предыдущую фиксацию.
Примечание. Это также можно использовать для редактирования некорректного сообщения фиксации. Он откроет редактор по умолчанию (обычно vi
/ vim
/ emacs
) и позволит вам изменить предыдущее сообщение.
Чтобы указать встроенное сообщение фиксации:
git commit --amend -m "New commit message"
Или использовать предыдущее сообщение фиксации без его изменения:
git commit --amend --no-edit
Изменение изменений даты фиксации, но оставляет дату автора нетронутой. Вы можете сообщить git, чтобы обновить информацию.
git commit --amend --reset-author
Вы также можете изменить автора фиксации с помощью:
git commit --amend --author "New Author <[email protected]>"
Примечание. Имейте в виду, что изменение последней фиксации полностью заменяет ее, а предыдущая фиксация удаляется из истории ветви. Это следует учитывать при работе с публичными хранилищами и в филиалах с другими сотрудниками.
Это означает, что если предыдущая фиксация уже была нажата, после внесения в нее изменений вам придется push --force
.
Перенос изменений непосредственно
Как правило, вам нужно использовать git add
или git rm
для добавления изменений в индекс, прежде чем вы сможете git commit
их. Передайте параметр -a
или --all
для автоматического добавления каждого изменения (для отслеживаемых файлов) в индекс, включая удаление:
git commit -a
Если вы также хотите добавить сообщение фиксации, которое вы бы сделали:
git commit -a -m "your commit message goes here"
Кроме того, вы можете присоединиться к двум флагам:
git commit -am "your commit message goes here"
Вам не обязательно обязательно фиксировать все файлы одновременно. Опустите флаг -a
или --all
и укажите, какой файл вы хотите зафиксировать напрямую:
git commit path/to/a/file -m "your commit message goes here"
Для прямого ввода нескольких файлов можно указать один или несколько файлов, каталогов и шаблонов:
git commit path/to/a/file path/to/a/folder/* path/to/b/file -m "your commit message goes here"
Создание пустой фиксации
Вообще говоря, пустые коммиты (или коммиты с состоянием, которые идентичны родительскому) являются ошибкой.
Однако при тестировании сборок сборки, CI-систем и других систем, которые вызывают фиксацию, удобно иметь возможность легко создавать коммиты без необходимости редактировать / прикоснуться к фиктивному файлу.
--allow-empty
будет обходить проверку.
git commit -m "This is a blank commit" --allow-empty
Изменения этапа и фиксации
Основы
После внесения изменений в исходный код вы должны сгенерировать эти изменения с помощью Git, прежде чем сможете их совершить.
Например, если вы измените README.md
и program.py
:
git add README.md program.py
Это говорит git, что вы хотите добавить файлы к следующему фиксации.
Затем выполните свои изменения с помощью
git commit
Обратите внимание, что это откроет текстовый редактор, который часто является vim . Если вы не знакомы с vim, вам может понадобиться знать, что вы можете нажать i
чтобы перейти в режим вставки , написать сообщение о фиксации, а затем нажать Esc
и :wq
для сохранения и выхода. Чтобы не открывать текстовый редактор, просто -m
флаг -m
с вашим сообщением
git commit -m "Commit message here"
Фиксированные сообщения часто следуют определенным правилам форматирования, см. « Сообщения о хорошей фиксации» для получения дополнительной информации.
Ярлыки
Если вы изменили большое количество файлов в каталоге, а не перечисляете каждый из них, вы можете использовать:
git add --all # equivalent to "git add -a"
Или добавить все изменения, не считая удаленных файлов , из каталога верхнего уровня и подкаталогов:
git add .
Или добавлять только файлы, которые в настоящее время отслеживаются («обновление»):
git add -u
При желании просмотрите поэтапные изменения:
git status # display a list of changed files
git diff --cached # shows staged changes inside staged files
Наконец, зафиксируйте изменения:
git commit -m "Commit message here"
В качестве альтернативы, если вы только модифицировали существующие файлы или удаленные файлы и не создали никаких новых, вы можете комбинировать действия git add
и git commit
в одной команде:
git commit -am "Commit message here"
Обратите внимание, что это будет сгенерировать все измененные файлы так же, как git add --all
.
Чувствительные данные
Вы никогда не должны передавать конфиденциальные данные, такие как пароли или даже закрытые ключи. Если это произойдет и изменения уже перенесены на центральный сервер, рассмотрите любые конфиденциальные данные как скомпрометированные. В противном случае после этого можно удалить такие данные. Быстрое и простое решение - это использование «BFG Repo-Cleaner»: https://rtyley.github.io/bfg-repo-cleaner/ .
Команда bfg --replace-text passwords.txt my-repo.git
считывает пароли из файла passwords.txt
и заменяет их ***REMOVED***
. Эта операция рассматривает все предыдущие коммиты всего репозитория.
Задание от имени кого-то другого
Если кто-то другой написал код, который вы совершаете, вы можете дать им кредит с опцией --author
:
git commit -m "msg" --author "John Smith <[email protected]>"
Вы также можете указать шаблон, который Git будет использовать для поиска предыдущих авторов:
git commit -m "msg" --author "John"
В этом случае будет использоваться информация автора из последней фиксации с автором, содержащим «Джон».
На GitHub коммиты, сделанные одним из вышеперечисленных способов, покажут большой авторский миниатюру, а коммиттер будет меньше и впереди:
Задание изменений в определенных файлах
Вы можете зафиксировать изменения, внесенные в определенные файлы, и пропустить их, используя git add
:
git commit file1.c file2.h
Или вы можете сначала сфабриковать файлы:
git add file1.c file2.h
и передать их позже:
git commit
Хорошие сообщения о фиксации
Важно, чтобы кто-то проходил через git log
чтобы легко понять, в чем заключается каждая фиксация. Хорошие сообщения о совершении сообщения обычно включают в себя ряд задач или проблем в трекер и краткое описание того, что было сделано и почему, а иногда и как это было сделано.
Более эффективные сообщения могут выглядеть так:
TASK-123: Implement login through OAuth
TASK-124: Add auto minification of JS/CSS files
TASK-125: Fix minifier error when name > 200 chars
В то время как следующие сообщения не были бы столь полезными:
fix // What has been fixed?
just a bit of a change // What has changed?
TASK-371 // No description at all, reader will need to look at the tracker themselves for an explanation
Implemented IFoo in IBar // Why it was needed?
Способ проверить, записано ли сообщение фиксации в правильном настроении, - заменить пустой сообщение и посмотреть, имеет ли смысл:
Если я добавлю это коммит, я буду ___ в мой репозиторий.
Семь правил большого сообщения git commit
- Отделите строку темы от тела пустой строкой
- Ограничьте строку темы до 50 символов
- Заглавие строки темы
- Не завершайте строку темы с периодом
- Используйте императивное настроение в строке темы
- Вручную оберните каждую линию тела 72 символами
- Используйте тело, чтобы объяснить, что и почему, а не как
7 правил из блога Криса Бима .
Фиксирование на определенную дату
git commit -m 'Fix UI bug' --date 2016-07-01
Параметр --date
задает дату автора . Эта дата появится, например, в стандартном выпуске журнала git log
.
Чтобы принудительно установить дату фиксации :
GIT_COMMITTER_DATE=2016-07-01 git commit -m 'Fix UI bug' --date 2016-07-01
Параметр date принимает гибкие форматы, поддерживаемые датой GNU, например:
git commit -m 'Fix UI bug' --date yesterday
git commit -m 'Fix UI bug' --date '3 days ago'
git commit -m 'Fix UI bug' --date '3 hours ago'
Когда дата не укажет время, будет использовано текущее время, и только дата будет переопределена.
Выбор, какие строки должны быть поставлены для совершения
Предположим, что у вас много изменений в одном или нескольких файлах, но из каждого файла вы хотите только зафиксировать некоторые изменения, вы можете выбрать нужные изменения, используя:
git add -p
или же
git add -p [file]
Каждое из ваших изменений будет отображаться индивидуально, и для каждого изменения вам будет предложено выбрать один из следующих вариантов:
y - Yes, add this hunk
n - No, don’t add this hunk
d - No, don’t add this hunk, or any other remaining hunks for this file.
Useful if you’ve already added what you want to, and want to skip over the rest.
s - Split the hunk into smaller hunks, if possible
e - Manually edit the hunk. This is probably the most powerful option.
It will open the hunk in a text editor and you can edit it as needed.
Это будет составлять части файлов, которые вы выберете. Затем вы можете выполнить все поэтапные изменения следующим образом:
git commit -m 'Commit Message'
Изменения, которые не были поставлены или зафиксированы, по-прежнему будут отображаться в ваших рабочих файлах и могут быть совершены позже, если потребуется. Или, если остальные изменения нежелательны, их можно отбросить с помощью:
git reset --hard
Помимо разложения больших изменений на мелкие коммиты, этот подход также полезен для рассмотрения того, что вы собираетесь совершить. Индивидуально подтверждая каждое изменение, у вас есть возможность проверить, что вы написали, и можете избежать случайного размещения нежелательного кода, такого как инструкции println / logging.
Изменение времени фиксации
Вы изменяете время фиксации, используя
git commit --amend --date="Thu Jul 28 11:30 2016 -0400"
или даже
git commit --amend --date="now"
Изменение автора фиксации
Если вы сделаете фиксацию как неправильный автор, вы можете изменить ее, а затем изменить
git config user.name "Full Name"
git config user.email "[email protected]"
git commit --amend --reset-author
Подписание GPG
Определите свой идентификатор ключа
gpg --list-secret-keys --keyid-format LONG /Users/davidcondrey/.gnupg/secring.gpg -------------------------------------- sec 2048R/YOUR-16-DIGIT-KEY-ID YYYY-MM-DD [expires: YYYY-MM-DD]
Ваш идентификатор представляет собой буквенно-цифровой 16-значный код, следующий за первой косой чертой.
Определите свой идентификатор ключа в настройке git
git config --global user.signingkey YOUR-16-DIGIT-KEY-ID
Начиная с версии 1.7.9, git commit принимает параметр -S для прикрепления подписи к вашим записям. С помощью этой опции будет предложено ввести ключевую фразу GPG и добавить свою подпись в журнал фиксации.
git commit -S -m "Your commit message"