Git从一个远程分支推送到另一个远程分支

时间:2018-03-01 17:33:46

标签: git

我正在处理源代码的三个分叉版本。仅供参考我将名称更改为不透露身份/回购。以下是它的布局:

MyMBP:~/Documents/_library$ git remote -v

abc https://github.com/abc/_library (fetch)
abc https://github.com/abc/_library (push)
origin  https://github.com/123/_library.git (fetch)
origin  https://github.com/123/_library.git (push)
upstream    https://github.com/source/_library (fetch)
upstream    https://github.com/source/_library (push)

此处, upstream 是原始源代码,是最新且最稳定的版本。 Origin是我的分叉版本。 ABC是别人的版本。

ABC有一个分支机构,我从那里开始工作。我想然后进行更改并推送到我的仓库(原产地),然后提交拉动请求。 ABC上的分支被称为" abc / obs-noise"。

根据git状态:

git status
HEAD detached from abc/obs-noise

当我对所述文件进行更改时,我承诺:

git commit
[detached HEAD e8eeea3] OBSERVATION NOISE ADDITION TO THE MONITORS
 1 file changed, 23 insertions(+), 11 deletions(-)

然后我git推(据说是我的起源)。

git push -u origin abc/obs-noise
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 733 bytes | 733.00 KiB/s, done.
Total 5 (delta 4), reused 1 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To https://github.com/123/_library.git
 * [new branch]      abc/obs-noise -> abc/obs-noise

然而,我去了我的回购...没有abc / obs-noise,或者这个提交的任何证据。我是git的菜鸟,但我几乎可以肯定我做的一切都是正确的,它看起来就是那样。我想知道我在哪里找到我的提交?我不想重做我所有的工作。

2 个答案:

答案 0 :(得分:4)

首先,你坐在一个独立的头上。这意味着您刚刚进行的任何提交都不会移动原始分支指针。如果你改变了活跃的分支,你很有可能失去这些提交,这就是为什么git push不会推动任何新的东西:原始的分支指针没有被移动。

首先,当您开始处理任何远程分支时,您应该创建一个本地分支,对应于给定的远程分支。使用

git checkout -b <local_branch_name> <remote>/<branch>

然后,当您提交时,此<local_branch_name>将提前跟随您的提交行。当您需要将给定的提交行推送到远程分支时,请使用

git push <remote> <local_branch_name>:<remote_branch_name>

如果您需要为不同的遥控器设置多个开发线,您应该创建几个相应的本地分支并单独推送它们。

答案 1 :(得分:3)

你无法从分离的HEAD推动。唯一的方法是

git checkout -b newbranch e8eeea3
git push origin origin_branch_name

有关详细信息,请参阅here

从@Torek输入后进行编辑:可能存在用例,您想要推动分离的头部。有关详细信息,请参阅here。见下面的评论。