Научите меня 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].