2009-09-14 1 views
1

У меня есть большой проект, который я обновлял до края Rails. Я сделал копию всего каталога проекта и реорганизован там в качестве меры предосторожности, чтобы доверять git (или, по крайней мере, как я могу использовать/использовать его неправильно). После завершения большую часть работы я вернулся в исходный каталог проекта и на консоли (это из памяти и так свободно основан на том, что произошло на самом деле):ошибка git или неправильное использование ветвления?

git branch edge 
git checkout edge 
git rm vendor/plugins 
git commit -m "wiped out old plugins" 

я вручную скопировать в последних версиях плагинов, которые я обновил в моем скопированном проекте.

git add vendor/plugins 
git commit -m "re-added in plugins, some unchanged, some later versions" 

Мое понимание заключается в том, что вышеуказанное добавление является рекурсивным. Чтобы получить некоторое доверие к git, я поменялся местами между ведущей веткой и ветвью краев в разное время во время моей работы, просто чтобы убедиться, что она обрабатывает подмены.

git checkout master 
git checkout edge 

Что я заметил, так это то, что (после некоторых свопов) в ветви края некоторые из плагинов вернулись к основным версиям. Много раз я пытался зафиксировать последнюю версию проблемного плагина, но в конце концов он вернулся после замены.

Я подозреваю, что, возможно, возникла проблема с тем, как я добавил файлы после их перемещения вручную. (Был ли git добавлен поставщик/плагины/* необходимо?) У кого-нибудь была проблема с заменой между ветвями, когда в двух ветвях есть одни и те же подкаталоги? Как вы можете справиться с слиянием изменений, найденных в копии приложения, найденного в одном каталоге, в оригинале? Исходный репозиторий чист, а копия довольно перепутана с попыткой получить определенные плагины для изменения в ветви края.

ответ

5

Это похоже на действительно странный способ сделать то, что вы намеревались.

Чем больше «мерзавец» способ делать то, что вы предложили бы для:

$ git checkout -b edge 
... #make your modifications for the port. 
$ git commit -m'ported plugins to rails edge' -a 
$ git checkout master # original code is there untouched 
$ git checkout edge # ported code is there just as you commited it. 

Оттуда в зависимости от того, что вы цель, что вы можете:

$ git checkout master # make sure you are on the master branch 
$ git merge edge # merge the edge branch into master 
... # fix any errors 
$ git branch -d edge # remove the edge branch since you don't need it anymore. 

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

+0

Я ценю обратную связь. Я знал, что я не придерживаюсь стандартного подхода, но я все еще новичок в git и поэтому хотел быть осторожным, если бы мог выполнить команду git, которую я не понимал полностью и не терял кучу работы. – Mario

+0

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

+0

К сожалению, даже после ваших шагов я получаю такую ​​проблему, когда я пытаюсь переключиться на главную ветку: Ошибка: файл без изменений рабочего дерева «vendor/extensions/blog_tags/LICENSE» будет перезаписан слиянием. Я испытал это раньше, и это, похоже, вызывает проблемы. – Mario

2

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

кроме того, что это действительно лучше создать ветку для работы на вашем края функции, а затем объединить ветку обратно, как упомянуто Jeremy стены

 Смежные вопросы

  • Нет связанных вопросов^_^