2011-05-03 107 views
15

我使用的是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 
4

Git通过推动整个提交工作。可以交互重新绑定来隔离您对感兴趣的目录所做的更改,或为其创建子模块。

1

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

如果您尚未在其他地方推送这些更改,则可以尝试使用交互式底图来使您的提交看起来像您所需要的。有关更多详细信息,请参阅git-rebase man pagethis chapter in the Git community book

0

您报告的错误不报告冲突 - 您只在合并时在本地发生冲突(例如,作为git pull的一部分)。那个错误只是拒绝用你的提交来更新远程分支,因为你的提交不包括你试图推送的分支的历史记录。通常,这意味着别人已经迫使一些分歧发展到分支,你需要拉或变基 - 还有更多的在这里:How git works when two peers push changes to same remote simultaneously

然而,直接回答你的问题,均属始终代表树的完整状态,所以你只需要创建一个只在感兴趣的子目录中有变化的提交。只需更改到该子目录中,然后使用git add来转移您在那里更改的文件。然后,当您提交时,请确保您不要使用-a参数,否则您的存储库中的所有更改都将引入该提交。