Поиск…


Вступление

Обязательства с 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

  1. Отделите строку темы от тела пустой строкой
  2. Ограничьте строку темы до 50 символов
  3. Заглавие строки темы
  4. Не завершайте строку темы с периодом
  5. Используйте императивное настроение в строке темы
  6. Вручную оберните каждую линию тела 72 символами
  7. Используйте тело, чтобы объяснить, что и почему, а не как

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

  1. Определите свой идентификатор ключа

    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-значный код, следующий за первой косой чертой.

  2. Определите свой идентификатор ключа в настройке git

    git config --global user.signingkey YOUR-16-DIGIT-KEY-ID
    
  3. Начиная с версии 1.7.9, git commit принимает параметр -S для прикрепления подписи к вашим записям. С помощью этой опции будет предложено ввести ключевую фразу GPG и добавить свою подпись в журнал фиксации.

    git commit -S -m "Your commit message"
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow