如何将分支推送回私有的Github仓库

4
我已经将一个私有仓库克隆到本地。在完成一些更改后,我想将分支推送回github以提出合并请求(或者如github所称的pull request)。
我该如何实现这个操作?
我对github完全不熟悉(我通常使用bzr / launchpad ,其命令是。在git中相应的等价物是什么?)。
[编辑:我发现我的措辞很容易让人误解,因为我对git的术语了解很少,我准备重新描述我所做的事情]
bar 是私有存储库)
$git clone git@github.com:foo/bar.git
$cd bar
$touch <some file> # ie., make some changes
$git commit ...
$ <<<<< NOW I need to push this back to github here.

在 Git 中,你克隆的是一个仓库,而不是一个分支。 - CharlesB
@CharlesB 好的,我是指“克隆一个仓库”。就像我说的,Git 的术语对我来说非常令人困惑。 - user1508893
我明白了。是的,我对本地仓库进行了一些更改。我该如何将其推送回Github?(这意味着它将成为主分支的一个分支,对吗?) - user1508893
抱歉如果我的措辞有些混淆(正如我所说,我不熟悉所有的术语)。让我重新表述一下我做了什么(现在正在编辑问题)。 - user1508893
关于git的事情是它是分布式的。当你克隆时,你克隆的是整个代码库。现在,你在本地"拥有"它。如果你在克隆之后没有创建一个分支,那么你就是在修改master - 现在发布一个答案。 - Brian Roach
显示剩余9条评论
2个回答

5
从您上面的评论和原始问题中可以看出,您想在github上进行pull request,但您已经在本地修改了master分支...这是个问题。您想要做的是先创建一个新分支,在其上进行修改,然后在本地提交并推送该分支。然后您就可以从该分支在github上创建一个pull request。
首先,您需要执行以下操作来解决此问题:
git branch mytopicbranch git reset --hard origin/master 现在,您有了一个新分支,并将本地的master分支重置为与远程仓库中的内容相同。现在,您可以使用以下命令推送您的分支:
git push origin mytopicbranch
然后,在github上,您就可以为该分支创建一个pull request了。
正常的流程应该是:
git clone <remote repo> 
<cd to directory>
git checkout -b mybranch 
<make changes> 
<commit changes>
git push origin mybranch
<create pull request on github>

补充说明: 我这么翻译是因为你想要做一个 "拉请求"。如果你只想提交 master,你只需执行以下操作:

git push origin master

这样你的更改就会被提交到远程主干上了。


mytopicbranch的值是什么?私有repo的名称是什么?(例如,我的示例中的bar?) - user1508893
这一切都假定你当然有权将代码推送到 Github 上的远程(私有)仓库 :) - Brian Roach
"你在本地修改了主分支... 这是个问题" - 实际上,并不是个问题。你的本地分支完全独立于远程分支。如果它们有相同的名称并不是问题,除非它们有不同的用途可能会让你感到困惑。 - poke
这是你给分支起的名字(在我的回答中的第一个例子中为mytopicbranch)。origin是分配给你克隆自的远程仓库的假名 :) - Brian Roach
所以origin==git@github:foo\bar.git?有没有办法获取“origin”的实际值?同样地,我可以使用git push git@github:foo\bar.git mybranch name来代替git push origin mybranchname,是这样吗? - user1508893
显示剩余13条评论

2
私有主仓库并不属于我(即,我没有权限将我的仓库推送回主仓库)。我认为我只能将我的本地仓库推送回去,并请求所有者合并到主仓库。
您似乎把很多东西混淆了。首先,一个仓库是一个单独的单位。当您克隆一个仓库时,您会得到它的完整本地副本。
如果您克隆了一个不属于自己且没有写入权限的仓库,则无法向该仓库推送任何更改。如果是这种情况,您需要首先将其 fork 到您自己的 GitHub 帐户中。要做到这一点,请在仓库视图中点击 fork 按钮。这将在您自己的帐户中创建仓库的副本,您将拥有对其进行推送的权限。
因此,如果您有仓库的本地副本,您可以做任何想做的事情。没有任何影响 远程 仓库,既不是原始仓库,也不是您的 GitHub fork。您可以创建任意数量的分支并在任何地方提交。请注意,在 Git 中,分支不是某种构造。分支只是指向提交的简单指针,因此创建分支并不会有太大影响,除非您真正开始提交。
如果您有要推送到远程仓库的提交,可以使用 git push 来执行此操作:
git push <remote> <local-branch>:<remote-branch>

如果您想将本地的master分支推送到名为origin的远程上的test分支,您可以执行git push origin master:test命令。由于您明确地向远程分支test推送(先前不需要存在),因此不会影响远程的master分支。其他变化形式的git push命令只是上述命令的缩写。例如,git push <remote> <branch>是推送本地分支<branch>到跟踪远程分支(通常是同名的另一个分支)的第二种最常用的方式。所以它等价于<branch>:<branch>。最常用的方法只是git push,它会根据您的配置自动找到远程和分支,但为了安全起见,您可以明确指定。

回到您的用例,我假设您想要分叉别人的存储库,对其进行更改并将更改提议给原始作者作为拉取请求。为此,您应按照以下步骤操作:

  • 在GitHub上分叉存储库
  • 克隆您自己的存储库(即分叉)
  • 在您现在的本地存储库中进行更改
  • 将更改推送到您的分叉中(任何分支都可以,但为了清晰起见,建议使用单独的分支)
  • 在GitHub上浏览您的分叉时,单击拉取请求按钮,基于您推送的分支创建一个拉取请求。

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