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

12

我正在使用三个派生版本的源代码。为了不泄露身份和仓库信息,我已经更改了它们的名称。这是它们的布局:

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有一个我要拉取的分支,我想对其进行更改并推送到我的存储库(origin),随后提交拉取请求。ABC上的分支称为“abc/obs-noise”。

执行“git status”命令:

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 push操作(理论上是推送到我的远程仓库)。
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的新手,但我几乎确定我做得没错,看起来是这样的。我想知道在哪里能找到我的提交?重新做所有的工作我会很恼火。


尝试使用 git checkout -b newbranch e8eeea3 命令。一切都在吗? - Christoph
哈哈...是的!哦天啊,谢谢你。我现在看到了我应该看到的地方。不过这很不幸。我不确定为什么这个东西只有本地有,而没有推送到远程。 - ajl123
2个回答

9

首先,你正在使用分离的 HEAD。这意味着你刚刚创建的任何提交都不会移动原始分支指针。因此,如果你更改活动分支,则有很大机会丢失这些提交,这就是为什么 git push 不会推送任何新内容的原因:原始分支指针尚未移动。

首先,当你开始在任何远程分支上工作时,应该创建对应于给定远程分支的本地分支。使用

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

当您进行提交时,此<local_branch_name>将会随着您的提交而前进。当您需要将特定的提交行推送到远程分支时,请使用

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

如果需要针对不同的远程仓库创建多个开发分支,您应该创建相应的本地分支并将它们分别推送。

4
你不能从分离的 HEAD 进行 push 操作。唯一的方法是:
git checkout -b newbranch e8eeea3
git push origin origin_branch_name

更多细节请参见这里

@Torek提供了输入后的编辑:可能存在需要推送游离头部的使用情况。有关详细信息,请参见此处。请查看下面的评论。


2
可以从分离的HEAD推送,但那是比较高级的Git用法。最好说“不要这样做,太容易混淆了” :-) - torek
那是一个例子,没错。 - torek
@Torek,有没有使用情况可以/应该推送一个分离的Head? - Christoph
1
是的,但这相当不寻常(而且通常有更好的选择,或者至少更易理解)。 - torek

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