Нажатие только одной папки для удаленного репо
Я использую Git 1.7.4.1. Я хочу нажать фиксации, которые я сделал в одной папке, на мое удаленное репо. Как я могу нажимать только изменения из одной папки на мой удаленный репо? Вся документация, которую я нашел, содержит только список того, как нажать полное репо...
davea-mbp2:systems davea$ git push origin trunk
Password:
To http://[email protected]/systems.git
! [rejected] trunk -> trunk (non-fast-forward)
error: failed to push some refs to 'http://[email protected]/systems.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.
Контакты, о которых я предупреждаю, не относятся к папке, которую я хочу нажать. Любая помощь приветствуется, - Дэйв
Ответы
Ответ 1
Git не похож на подрывную деятельность. Короткий ответ: вы не можете.
Вам следует подумать о том, чтобы переустановить ваше изменение (только соответствующее) на удаленный
git rebase -i origin/trunk
должен начать вас. Обязательно прочитайте комментарии и инструкции на этом пути. Конечно, есть и man git-rebase
.
В конце, когда вы удовлетворены результатом, вы можете либо создать новую ветку оттуда
git checkout -b rebased HEAD
или вы можете сделать его новым мастером. Я оставлю это для вас, как управлять своими веткими локально (потому что вы не сообщили нам о них).
Нажав woud, тогда с помощью
git push origin trunk
Ответ 2
Git работает, нажимая целые коммиты. Либо переформатируйте в интерактивном режиме, чтобы изолировать свои изменения в интересующем вас каталоге, либо создать для него подмодуль.
Ответ 3
git единицей работы является фиксация. Если вы хотите переместить изменения в один каталог, но не другие, эти изменения должны быть отдельными фиксациями.
Если вы еще не нажали эти изменения в другом месте, вы можете попробовать интерактивную rebase, чтобы ваши коммиты выглядели так, как вам нужно. См. git -rebase man page и эту главу в Git community book для более подробной информации.
Ответ 4
Ошибка, о которой вы сообщаете, не сообщает о конфликтах - локальные конфликты возникают только при слиянии (например, как часть git pull
). Эта ошибка просто отказывается обновлять удаленную ветку с вашей фиксацией, поскольку ваша фиксация не включает историю ветки, к которой вы пытаетесь нажать. Обычно это означает, что кто-то другой подтолкнул какое-то расходящееся развитие к этой ветке, и вам нужно вытащить или переустановить - здесь еще больше: Как git работает, когда два одноранговых узла изменяют одно и то же удаленный одновременно
Однако, чтобы ответить на ваш вопрос напрямую, он всегда представляет полное состояние дерева, поэтому вам просто нужно создать коммит, который имеет только изменения в интересующем вас подкаталоге. Просто перейдите в этот подкаталог и используйте git add
для создания файлов, которые вы там изменили. Затем, когда вы совершаете фиксацию, убедитесь, что вы не используете параметр -a
, иначе все изменения в вашем репозитории будут введены в этот коммит.