Научи меня мерзавцу совершить - PullRequest
16 голосов
/ 11 апреля 2011

Я не вообще не понимаю git commit.

Прошла неделя с тех пор, как я использовал git, и все эти git с -a, -m, новыми файлами, без отслеживания и т. Д. меня полностью смущают. Tortoisegit на данный момент спасает меня, но я хотел бы понять суть и использовать ее так, чтобы это было совершенно легко.

Когда я нахожусь в командной строке git, довольно сложно выборочно фиксировать некоторые файлы и сохранять остальные для другого коммита. Как мне сделать это легко?

Ответы [ 4 ]

30 голосов
/ 11 апреля 2011

Это довольно просто. Вам нужно добавить изменения, которые вы хотите, чтобы индекс сначала:

git add file1 file2

тогда

git commit

если вы удалили файл, это сделает add. Добавить означает " добавить изменение ", даже если это удаление.

Если вы хотите добавить все изменения:

git add -A

Параметр -a в коммите говорит, что нужно добавить все изменения отслеживаемых файлов и зафиксировать их. Так

git commit -a

не будет фиксировать новый файл , который вы создали. Вы должны явно добавить это.

Параметр -m позволяет избежать открытия редактора для редактирования сообщения о коммите и использовать то, что вы вводите, следуя опции -m:

git commit -m "Use this message and don't open the editor"

Иногда это не очень хорошая идея. Если вы только что попытались выполнить слияние и у вас возникли конфликты , git кэширует очень хорошее сообщение для вас, как только вы разрешите конфликты и подтвердите коммит. Так что git commit лучше.

Чтобы выборочно добавлять файлы, используйте модификатор patch в git add:

git add -p

Теперь запросит у вас файлы . Это достаточно мощный инструмент, поскольку вы также можете указать части файлов или, в качестве альтернативы, отредактировать то, что хотите добавить в индекс. Git commit только добавит те.

Если вам нужна помощь с графическим интерфейсом, которая не является черепаховой ( избегайте интеграции оболочки Windows ), используйте git gui.

Вот диаграмма, объясняющая индекс (или промежуточные файлы ):

enter image description here

(из http://progit.org/book/ch2-2.html)

надеюсь, это поможет.

5 голосов
/ 11 апреля 2011

Когда я нахожусь в командной строке git, довольно сложно выборочно фиксировать некоторые файлы и сохранять остальные для другого коммита. Как мне сделать это легко?

По иронии судьбы, это одна из вещей, которую git делает очень простой, но вы должны изучить концепцию, которой просто нет у других систем контроля версий. Эта идея - «промежуточная область» (технически известная как «индекс»), которая по существу отслеживает контент, который будет в вашем следующем коммите. Когда вы говорите git add somefile, что не означает «начать отслеживание файла с этим именем», это означает «подготовить содержимое файла, как оно есть сейчас». Вы можете сделать это только для файлов, которые вы выбираете в своем рабочем дереве - тогда простой git commit просто превращает содержимое промежуточной области в ваш следующий коммит.

Использование параметра -a для git commit в основном говорит: «Мне нет дела до этой области подготовки / индексации, просто ставьте все, что отслеживается, перед фиксацией». Так что, пока вы не будете довольны идеей размещения отдельных файлов, я просто буду делать "git commit".

Стоит часто запускать git status, когда вы добавляете файлы, чтобы привыкнуть к этой идее - она ​​показывает файлы в трех разделах, хотя не все будут присутствовать, если в этом разделе нечего сообщать:

Изменения, которые необходимо совершить:

В этом списке перечислены изменения, которые были поставлены, так что будет в следующем коммите. Сюда входят новые файлы, файлы, удаление которых было подготовлено, и любые файлы с поэтапными изменениями.

Изменено, но не обновлено:

В этом списке перечислены файлы с изменениями, которые еще не были подготовлены.

неотслеживаемые файлы:

Это файлы, о которых git ничего не знает - обычно вам нужно либо игнорировать их, добавляя шаблоны в ваш файл .gitignore, либо добавлять их с помощью git add.

Обратите внимание, что файлы могут появляться в обоих первых двух разделах. Например, вы можете изменить Makefile, а затем добавить его в индекс с помощью git add Makefile. Затем, если вы продолжите вносить дополнительные изменения в Makefile, сохраните его, а затем запустите git status, вы увидите, что он указан как в «Изменениях, которые должны быть зафиксированы», так и «Изменено, но не обновлено» - потому что ( как упомянуто выше) git add Makefile просто устанавливает точное содержимое файла при запуске команды. Если вы снова запустите git add Makefile, сценическая версия будет перезаписана версией в вашем рабочем дереве, так что все изменения, которые вы внесли в нее, будут поэтапными.

Может быть стоит добавить еще пару советов о полезной паре команд git diff и git diff --cached - по сути, их значения:

  • git diff: «Какие изменения я еще не ставил?»
  • git diff --cached: «Какие изменения я уже поставил?»

Как вы, вероятно, сможете понять из вышесказанного, это потому, что git diff показывает разницу между областью подготовки и вашим рабочим деревом, а git diff --cached показывает разницу между вашим последним коммитом и областью подготовки.

2 голосов
/ 11 апреля 2011

Вы можете просмотреть страницу руководства для git commit, набрав git commit --help (также здесь ).

Чтобы добавить файлы для фиксации, используйте git add или, еслифайлы уже находятся в хранилище, вам поможет флаг -a.

-m помечает сообщение для вашего коммита.

Если вы хотите выборочно выбирать файлы, используйте git add а затем git commit без тега -a (который добавит все изменения к файлам, существующим в хранилище).

Лично я также использую параметр -s, который добавляет signed off by <your.email@gmail.com>в конце, если у вас есть это в вашем git config.Если нет, просто используйте git config --global user.email your.email@google.com.

1 голос
/ 02 июня 2018

Достаточно просто зафиксировать файлы в git.Для добавления файлов у нас есть следующие команды

git add file1 file2

Или, если вы хотите добавить все файлы одновременно, вы можете сделать это с помощью

git add *

Затем наступает момент фиксации.По словам профессионалов, вам необходимо добавить сообщение с коммитом, чтобы было легче отслеживать, что вы зафиксировали.Для этого вы можете использовать

git commit -m "your message"

Если вы хотите зафиксировать любые файлы, которые вы добавили с помощью git add, а также зафиксировать любые файлы, которые вы изменили с тех пор.Вы можете использовать

git commit -a

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

git status

И для отправки ваших изменений в основную ветку вашего удаленного репозитория.Команда

git push origin master

Надеюсь, это поможет вам понять концепцию git add, commit и push.И решить вашу проблему также.

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