如何在Git中推送到上游?

时间:2016-10-19 20:59:07

标签: git github

我在GitLab有几个朋友的项目,当然还有主分支,还有其他一些。当我克隆存储库时,我使用命令git remote add upstream ...创建了一个上游。

然后,我发出了git fetch upstream。其次是git checkout upstream/test1。现在,如果我输入git branch -a,我会得到这样的输出:

* (HEAD detached at upstream/test1)
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/upstream/test1
  remotes/upstream/master

这很好,但后来我对upstream/test1分支中的代码进行了一些更改。我不想将它们推送到origin/test1,但我希望能够将我的更改推送到upstream/test1,以便我的其他朋友可以看到它。但是,如果我发出以下命令集:

git add .
git commit -m "Sample message"

提交后我得到了消息:

[detached HEAD 4f20e95] Sample message
 5 files changed, 12 insertions(+), 1 deletions(-)

在我的命令提示符中,哈希值更改为4f20e95。然后,如果我git push,我收到以下错误消息:

fatal: You are not currently on a branch.
To push the history leading to the current (detached HEAD)
state now, use

    git push origin HEAD:<name-of-remote-branch>

如何在不实际推送到原点的情况下推送到我的上游分支。

1 个答案:

答案 0 :(得分:7)

分支upstream/test1是一个远程跟踪分支,无法手动更新。此类分支跟踪远程服务器上的分支,仅在git fetch / git push期间更新。

相反,请先检查一个新的本地分支:

git checkout -b test1 upstream/test1

照常提交。既然你已经提交了,那就做:

git checkout -b test1 4f20e95

准备就绪后,请转到upstream

git push upstream test1

当您执行普通git push时,Git会根据某些配置选项使用远程和分支的默认值进行推送。但是,如果您不在某个分支上(因此收到detached HEAD消息),那么Git不知道要推送哪个分支,从而为您提供收到的错误。