Научите меня git совершить
Я dont понимаю git commit на всех.
Это была неделя с тех пор, как Ive использовал git, и все эти git с -a, -m, новыми файлами, без следа и т.д. меня совершенно путают. Tortoisegit спасает меня на данный момент, но я хотел бы понять суть и использовать ее таким образом, чтобы это было совершенно легко.
Когда я нахожусь в командной строке git, довольно сложно выборочно зафиксировать некоторые файлы и сохранить остальные для другой фиксации. Как мне сделать это легко?
Ответы
Ответ 1
Это довольно просто. Вам нужно сначала добавить изменения, которые вы хотите индекс:
git add file1 file2
затем
git commit
если вы удалили файл, добавляет это. Добавить означает " добавить изменение", даже если это удаление.
Если вы хотите добавить все изменения:
git add -A
Параметр -a
на коммите говорит, чтобы добавить все изменения отслеживаемых файлов и зафиксировать их. Так
git commit -a
не будет создан новый файл. Вы должны явно добавить это.
Параметр -m
позволяет вам не открывать редактор для редактирования сообщения фиксации и использовать то, что вы ввели, используя параметр -m
:
git commit -m "Use this message and don't open the editor"
Иногда это не очень хорошая идея. Если вы просто попробовали слияние и имели конфликты, git кэширует очень приятное сообщение для вас, как только вы разрешаете конфликты и совершаете. Итак, лучше < <28 > .
Чтобы выборочно добавлять файлы, используйте модификатор патча на git add:
git add -p
Теперь будет сообщить о файлах. Это достаточно мощно, так как вы также можете указать части файлов или, альтернативно, редактировать то, что вы хотите добавить в индекс. A git commit добавит только те.
Если вам нужна помощь gui, которая не чересчур (избежать интеграции оболочки Windows), используйте git gui
.
Вот диаграмма, объясняющая индекс (или поэтапные файлы):
![enter image description here]()
(из http://progit.org/book/ch2-2.html)
надеюсь, что это поможет.
Ответ 2
Когда я нахожусь в командной строке 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
показывает разницу между вашим последним фиксацией и промежуточной областью.
Ответ 3
Вы можете просмотреть страницу руководства для git commit
, набрав git commit --help
(также здесь).
Чтобы добавить файлы к фиксации, используйте git add
или, если файлы уже находятся в репозитории, вам поможет -a
.
-m
помещает сообщение в ваше сообщение.
Если вы хотите выборочно выбирать файлы, используйте git add
, а затем git commit
без тега -a
(который добавит все изменения в файлы, существующие в репозитории).
Я лично использую параметр -s
, который добавляет signed off by <[email protected]>
в конце, если у вас это есть в конфигурации git. Если нет, просто используйте git config --global user.email [email protected]
.