Нажатие только одной папки для удаленного репо

Я использую 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, иначе все изменения в вашем репозитории будут введены в этот коммит.