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"
