Добавить и зафиксировать определенный файл в одну строку - PullRequest
0 голосов
/ 29 мая 2018

У меня есть два файла без постановки для коммитов:

  • src / A.java
  • src / B.java

Я хочу добавить и зафиксировать B.java в одну строку.Какой самый удобный способ для этого, например, один вкладыш.

Мне известно о git commit -am "Commit message", мне нужно сделать это для конкретного файла

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вы также можете выполнить:

git commit --only <paths>

(добавьте -m <message> при желании) или:

git commit --include <paths>

(снова добавьте -m <message> при желании).Это - чтобы немного упростить его - приводит к добавлению указанных путей к индексу (--include) или к временному индексу (--only), а затем к фиксации с использованием индекса, выбранного вами с помощью --only vs --include.

Если вы использовали --include, то завершенный коммит, который становится новым коммитом HEAD в текущей ветке, автоматически представляется расширенным индексом.Этот случай проще описать: он действительно работает так, как если бы вы git add редактировали эти файлы, поскольку он переносит любые ранние git add редактированные файлы.

Если вы использовали --only,Завершенный коммит, который становится новым HEAD, представляет собой что-то, что не обязательно находится в индексе normal .Этот случай более сложный, поскольку индекс обычно должен представлять (и, следовательно, содержать все те же файлы, что и) коммит HEAD, пока вы не запустите git add ing файлы для перезаписи версий индекса.Внутренние детали здесь заключаются в том, что Git копирует файлы --only в обычный индекс после безопасной установки нового коммита.

Сохраняя упрощение (поскольку все версии действительно используют некоторые специальные временные индексные файлы), мы можем построить диаграммуэто как:

  • Обычная фиксация: использует индекс в качестве источника для всех зафиксированных файлов.После завершения коммита индекс остается индексом и по-прежнему содержит все файлы.

    Следовательно, если вы git add fileA, а затем git commit, новый коммит будет иметь новый fileA (ивсе те же файлы, что и раньше).Индекс и новый HEAD коммит.

  • git commit --include <file>: действует так же, как git add, за которым следует git commit.

    Следовательно, если выgit add fileA, а затем git commit --include fileB, новый коммит имеет новый fileA и новый fileB (и тот же старый файл «все остальные», что и раньше).Индекс и новое совпадение HEAD.

  • git commit --only <file>: копирует фиксацию HEAD во временный индекс, добавляет <file> во временный индекс и запускает git commit с использованием временного индекса.В случае успеха добавляет <file> к индексу .

    Следовательно, если вы git add fileA, а затем git commit --only fileB, новый коммит имеет old fileA (из предыдущего HEAD коммита), new fileB (из временного индекса) и тот же старый файл «все остальные», что и раньше.Индекс после фиксации имеет новый fileA и новый fileB, поэтому индекс после фиксации отличается от нового коммита HEAD тем, что он имеет другую версию fileA.

0 голосов
/ 29 мая 2018

Поскольку git commit -am добавит все, вам все равно нужно сначала добавить, а затем зафиксировать, но, по крайней мере, вы можете сделать это в одну строку

git add src/B.java && git commit -m "add B"

Дело в том,отсутствует собственная команда Git для добавления и фиксации только одного файла (или подмножества измененных файлов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...