如何在Github上的分支上进行提交和拉取请求?

时间:2013-04-04 06:49:36

标签: git github branch git-commit pull-request

我认为似乎很容易......

  • 我分叉了一个名为abc的仓库,并在当地克隆了它。
  • 我分叉的原始仓库有一个名为2.1-stable
  • 的分支
  • 我的回购或本地没有此分支
  • 我需要在这个分支上进行提交,然后对我从
  • 分叉的原始仓库执行PR

这就是我的尝试:

// clone into a separate folder
git clone git:github.com/some/abc.git -b 2.1-stable ../ext
// set to my repo
git remote set-url origin git://github.com/me/abc.git

当我现在通过在某处添加空格来编辑文件并尝试提交时,我被告知:

local branch is ahead of remote by 1 commit

我试图获取/拉动,但是这会产生大量的合并冲突(因为我只是“间隔”,大多数不是因为我的行为),但无论如何......我被卡住了。

第二次尝试是在我的仓库中添加分支:

git branch -a

这表明我正在寻找的分支在remotes/upstream/2.1-stable。我试着补充说:

git checkout -b 2.1-stable remotes/upstream/2.1-stable

但这已经错了,甚至尝试像

一样
git push -u https://github.com/me/abc/2.1-stable.git 2.1-stable:2.1-stable

无法验证。

我可能在上面做了100件事......

问题
有人能告诉我如何正确地做到这一点吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

remote set-url更改了您的存储库的URL,这不是您想要的,因为两个存储库都将参与设置。

git中的分支与存储库克隆URL无关,这就是您上次尝试无法进行身份验证的原因。


git的部分神奇之处在于您可以在存储库中配置多个遥控器。因此,您可以使用git clone https://github/me/abc结帐自己,然后添加另一个git remote add upstream https://github/some/abc的遥控器(upstream(类似于origin)是此特定角色的常规名称) 。如果您现在运行git remote,则会看到两个推/拉网址对而不是一个。

您还没有从upstream获得任何数据,要执行此操作git fetch upstream。现在数据在您的存储库中是本地的,您可以通过使用git checkout -b 2.1-stable remotes/upstream/2.1-stable签出本地分支来处理它(这是来自您的帖子,您在那里非常接近)。因为您没有upstream的提交权限,而是在您完成编辑/提交后执行的操作是将新的本地分支推送到您自己的仓库origin {{1} }。现在,更改的代码在github上,您已准备好通过github表单向该特定分支发送拉取请求到git push origin 2.1-stable repo。

PS:请注意,无论您想要什么,都可以在upstream命名您的本地分支和远程分支。这有助于明确这不是来自origin的确切2.1-stable分支,但可能是upstream分支,其中有许多提交恰好基于{{1} }。如何在提交历史记录中检查分支的工作方式,但命名可以使浏览您的仓库的其他人更容易找出代码中不同分支的一部分代码。