48

伙计们,

我克隆了一个仓库。我通过发出以下命令创建了一个分支来处理功能:

git branch fix78

然后我在那个分支上工作

git checkout fix78

我继续向这个本地分支提交。现在我想把它推送到仓库,因此我发出了以下命令:

git push origin master:fix78

我从 Web 浏览器查看了 repo,发现在 repo 上创建了一个名为 fix78 的新分支。但它没有我所做的任何承诺。

我在这里做错了什么?这就是我想要实现的目标:

有一个 repo(master(SVN 术语中的主干)),现在当我在开发一个功能时,我想创建它的本地分支,然后我还想将此分支签入 repo(以便其他团队成员可以看到我在做什么),然后我希望我的本地分支与我创建的这个远程分支同步。

任何帮助/反馈都会非常棒。

谢谢。

4

2 回答 2

61

git push origin master:fix78将本地 master 推送到名为 fix78 的远程分支。您想推送本地分支 fix78,它具有相同的语法但没有master:

您可以通过git push origin :fix78删除远程分支然后git push origin fix78将本地分支推送到远程仓库来修复它。

于 2011-06-08T13:03:35.603 回答
52

push 命令的形式为

git push remote_name source_ref:destination_ref

纠正错误所需要做的就是

git push origin +fix78:fix78

加号表示您不关心该分支可能会丢失历史记录,因为之前的推送是错误的。

替代语法是

git push -f origin fix78

如果您省略目的地,则暗示它是同一个名称。如果跟踪设置到远程上的特定分支,它将转到该分支。删除分支有两种语法,旧的:

git push -f origin :fix78

git push --delete origin fix78

第一个被读作“将任何内容放入fix78”将其删除。

一个技巧是,如果您指定.为远程名称,则意味着当前存储库为远程。这对于无需检查即可更新本地分支很有用:

git push . origin/master:master

将更新主人而无需结帐主人。

希望这可以帮助

于 2011-06-08T15:04:51.460 回答