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

19

我正在使用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.

我收到的冲突警告与我想推送的文件夹无关。感激不尽,- Dave


我该如何将git仓库中的子目录部署/推送到Heroku? - M Imam Pratama
4个回答

4

Git通过推送整个提交来工作。要么交互式地进行变基,将更改隔离到您感兴趣的目录中,要么为其创建子模块。


3

Git不像Subversion。简短的回答是,你不能这样做。

你应该考虑将你的更改(仅与之相关的)基于远程版本进行变基。

git rebase -i origin/trunk

应该可以让您开始了。务必阅读其中的评论和说明。当然还有man git-rebase

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

 git checkout -b rebased HEAD

或者您可以选择将其作为新的主分支。我会让您决定如何在本地管理您的分支(因为您没有告诉我们有关它们的信息)。
然后,使用以下命令轻松推送:
 git push origin trunk

1

Git的工作单位是提交(commit)。如果您想将更改推送到一个目录而不是其他目录,则这些更改需要分开提交。

如果您尚未将这些更改推送到其他地方,可以尝试交互式变基(interactive rebase)来使您的提交看起来符合您的需求。有关更多详细信息,请参见git-rebase手册页面Git社区书籍中的本章节


0

您报告的错误并没有报告冲突 - 只有在合并时(例如作为git pull的一部分)才会在本地出现冲突。该错误只是拒绝使用您的提交更新远程分支,因为您的提交不包括您尝试推送到的分支的历史记录。通常这意味着其他人已经将一些不同的开发推送到该分支,您需要拉取或变基 - 这里有更多信息:当两个同行同时向同一个远程推送更改时Git如何工作

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接