仅将一个文件夹推送到远程仓库

时间:2011-05-03 13:27:04

标签: git

我正在使用Git 1.7.4.1。我想将我在一个文件夹上执行的提交推送到我的远程仓库。如何仅将更改从一个文件夹推送到我的远程仓库?我发现的所有文档都只列出了如何推送整个回购......

davea-mbp2:systems davea$ git push origin trunk
Password: 
To http://dalvarado@mydomain.com/systems.git
 ! [rejected]        trunk -> trunk (non-fast-forward)
error: failed to push some refs to 'http://dalvarado@mydomain.com/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.

我被警告的冲突不适用于我想要推送的文件夹。任何帮助表示赞赏, - 戴夫

4 个答案:

答案 0 :(得分:4)

Git通过推送整个提交来工作。以交互方式进行rebase以将更改隔离到您感兴趣的目录中,或者为其创建子模块。

答案 1 :(得分:1)

Git不像颠覆。简短的回答是,你不能。

您应该考虑针对远程

重新定义您的更改(仅限相关的更改)
git rebase -i origin/trunk

应该让你进行中。请务必阅读评论和说明。当然还有man git-rebase

最后,当您对结果感到满意时,您可以从那里创建一个新的分支

 git checkout -b rebased HEAD

或者您可以选择将其作为新主人。我会告诉你如何在本地管理你的分支机构(因为你没有告诉我们它们)。

推动woud然后轻松

 git push origin trunk

答案 2 :(得分:1)

git的工作单元是提交。如果要将更改推送到一个目录而不是其他目录,则这些更改需要是单独的提交。

如果您还没有将这些更改推送到其他地方,您可以尝试使用交互式rebase来使您的提交看起来像您需要的那样。有关详细信息,请参阅git-rebase man pagethis chapter in the Git community book

答案 3 :(得分:0)

您报告的错误不是报告冲突 - 您只在合并时在本地发生冲突(例如,作为git pull的一部分)。该错误只是拒绝使用您的提交更新远程分支,因为您的提交不包括您尝试推送的分支的历史记录。通常情况下,这意味着其他人已将某些不同的开发推向该分支,您需要拉动或变基 - 这里有更多内容:How git works when two peers push changes to same remote simultaneously

但是,要直接回答您的问题,提交始终代表树的完整状态,因此您只需要创建一个只在感兴趣的子目录中进行更改的提交。只需更改到该子目录,然后使用git add暂存您在其中更改的文件。然后,当您提交时,请确保使用-a参数,否则您的存储库中的所有更改都将引入该提交。