Мерзавец рефлог. Это правильное использование?

На данный момент это гипотетически, но это рабочий процесс, который я хотел бы применить на практике.

У меня есть шаблон, с которого я начинаю все свои веб-проекты. В настоящее время я использую github для хранения основного шаблона и просто клонирую каждый раз, когда строю проект.

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

Что я предлагаю, так это то, что я извлекаю шаблон из github в начале каждого проекта и собираю проект по локальной ветке. Когда я сталкиваюсь с чем-то, что, по моему мнению, будет полезно в главном шаблоне, я переключаюсь на основную ветку, внедряю там изменения, отправляю в github, а затем использую reflog, чтобы перевести эти изменения в текущее локальное состояние проекта.

Имеет ли это какой-то смысл, и я (как это вероятно) полностью пропустил точку рефлога?

большое спасибо

3 ответа

Проще говоря, это перепишет историю. Это причинит вам боль, если вы будете работать с GitHub. Как уже было сказано, reflog - это не тот инструмент, который вы бы использовали на регулярной основе.

В вашем случае нет абсолютно никаких причин использовать reflog. Вы можете иметь тот же рабочий процесс, просто делая это. Представьте, что вы работаете над my_local_project ветвь, и у вас есть некоторые изменения, которые вы хотите внести в шаблон. Тогда вы просто делаете:

git checkout master
# Hackety, hackety, make the change in your template
git checkout my_local_project
git merge master

Теперь все изменения, которые вы внесли в master ветвь будет объединена в my_local_project в чистом виде.

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

По моему мнению, reflog - один из самых уродливых инструментов в git - я не стал бы его использовать, если бы случайно не забил одно из своих изменений и не нашел другого способа добиться этого.

Учитывая ваш предложенный рабочий процесс, я бы посоветовал сделать все ваше кодирование в локальной ветке, и если вы в конечном итоге закодируете что-то полезное для шаблона, просто переключитесь на master и выберите отдельные коммиты, которые вы хотели бы задействовать.

http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html

Я, честно говоря, до сих пор не понимаю, что вы подразумеваете под "использовать reflog, чтобы перенести эти изменения со мной в текущее локальное состояние проекта". Reflog просто показывает прошлые позиции данного реф. Вы все еще должны объединить / rebase / cherry-pick, чтобы действительно "принести" эти изменения куда-либо еще. Вообще, слияние - самый элегантный способ.

Например:

git clone template local-project
cd local-project
git remote rename origin template-origin
# make changes and commit them
git add ...; git commit

# suppose changes have been made in the template (work as normal there)
# back in local-project, merge the template's master branch:
git pull template master

Ничего сложного. Просто объедините ветку с нужными вам изменениями. Это, вероятно, очевидно, но убедитесь, что вы никогда не потянете другой путь - из локального проекта в шаблон.

И, конечно же, связывайтесь с пультами в зависимости от ситуации. Вы, вероятно, захотите создать новый "источник" для local-project, указывая на его центральное хранилище (например, на github) и то же самое для template, Вы также можете указать удаленный шаблон в local-project в центральное хранилище шаблонов вместо вашего локального клона, если хотите.

Другие вопросы по тегам