Я изучаю git и заметил, что он имеет двухэтапный процесс коммита:
git add <files>
git commit
Первый шаг помещает изменения в так называемую «область подготовки» или «индекс».
Меня интересует, почему принимается это дизайнерское решение и в чем его преимущества?
Кроме того, как пользователь git вы делаете это или просто используете git commit -a
?
Я спрашиваю об этом, потому что я из bzr (Bazaar), который не имеет этой функции.
version-control
git
workflows
thomasrutter
источник
источник
git add -p
, вы можете выбрать фиксацию одного фрагмента файла, но не фиксацию другого фрагмента того же файла .git status
и возможноgit push
.Ответы:
Разделить работу на отдельные коммиты. Возможно, вы много раз открывали файл для написания однострочного исправления, но в то же время вы замечали, что форматирование было неправильным, некоторая документация может быть улучшена или какое-то другое несвязанное исправление. С другими RCS вы должны были бы записать это или зафиксировать в памяти, закончить исправление, к которому вы пришли, зафиксировать это, а затем вернуться, чтобы исправить другие вещи (или создать коммит из грязи с несвязанными вещами) , С Git вы просто исправляете все это сразу, а stage + фиксирует одну строку отдельно, с помощью
git add -i
илиgit-gui
.Не ломай сборку. Вы работаете над сложной модификацией. Таким образом, вы пробуете разные вещи, некоторые из которых работают лучше, чем другие, некоторые ломают вещи. С Git вы бы ставили вещи, когда модификация делала вещи лучше, и
checkout
(или немного улучшали ), когда модификация не работала. Вам не нужно полагаться на функции отмены редактора, вы можетеcheckout
использовать весь репозиторий, а не просто файл за файлом, и любые ошибки на уровне файлов (такие как удаление файла, который не был зафиксирован, или сохранение + закрытие после плохая модификация) не приводит к потере большого количества работы.источник
git add -i
с одноступенчатым коммитом? Вы должны просто выбрать группу файлов (или строк в файлах), связанных с одной функцией, и выполнить коммит. Затем вы вернетесь и сделаете второй коммит, связанный с другой функцией ..git-branch
типу ( jovicailic.org/2017/04/vim-persistent-undo ). Далее ваша история отмен автоматически отслеживается каждый раз, когда вы переходите в обычный режим. Таким образом, это уменьшает ваше умственное бремя необходимости создавать «точки отмены вручную». Почему использование буферов отмены ваших редакторов не так методично?Одним из преимуществ для меня является возможность «добавлять» файлы постепенно. Перед фиксацией я просматриваю каждый файл. Как только файл просмотрен, я добавляю его. Когда я
git status
илиgit diff
, git показывает мне только файлы, которые были изменены и еще не были добавлены. Когда я проверил все файлы и добавил их, я могу сделать коммит.Так что да, я считаю, что место для постановки очень полезно.
И нет, я никогда не использую
git commit -a
. Тем не менее, я часто используюgit add -u
. Таким образом, я все еще могу визуализировать, что должно быть совершено.источник
Преимущество довольно простое: оно дает вам полный контроль над тем, какие файлы вы хотите зафиксировать, когда. В этом отношении вы можете использовать,
git add -p
чтобы контролировать, какие строки вы хотите зафиксировать.источник
.gitignorelines
чтобы вы могли вносить локальные изменения в отдельные строки, которые могли бы пережить коммиты и остаться без измененийapp.conf
который содержит материал, которым вы хотите поделиться, а затем тот,db.conf
который вы просто поместили в список .gitignore. Задача решена. Если вы используете что-то запатентованное, вам действительно стоит задуматься о том, чтобы получить что-то настолько простое. Или поместите его через препроцессор в событие перед сборкой. Множество решений есть.Одним из преимуществ, которые мне нравятся, является возможность совершать часть изменений. Т.е., используя git add -e. Я делаю не так часто, как следовало бы, и команда git add -e позволяет мне в какой-то степени распутывать мои изменения.
источник