git 无法将我的本地分支与远程合并

git unable to merge my local branch with remote

我克隆了我组织的 git 存储库,如下所示

git clone https://giturl/my_org_name/runbooks

它要求我的 username/password 并成功克隆它。

然后我检查了一个新的本地分支

git checkout -b patchv1

我做了几次提交。

然后我结帐到 master 并将我的 patchv1 分支与 local 大师.

git checkout master

git pull

git merge patchv1

下面是我的git状态输出

git status

On branch master
Your branch is ahead of 'origin/master' by 4 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

git remote show origin

* remote origin   
Fetch URL: https://giturl/my_org_name/runbooks.git   
Push  URL: https://giturl/my_org_name/runbooks.git   
HEAD branch: master 
Remote branches:
   upgrade-schedules           tracked
   ...................           .....
   patchv2                     tracked   
Local branch configured for 'git pull':
  master merges with remote master   
Local ref configured for 'git push':
  master pushes to master (fast-forwardable)

我想将我的 local master 分支推送到远程源,但名称不同。因此,我将以下命令与 -u 一起使用,以便创建远程分支

git push -u origin master:newpatchv2

低于错误

remote: Permission to my_org_name/runbooks.git denied to my_username. fatal:
unable to access 'https://giturl/my_org_name/runbooks.git/': The
requested URL returned error: 403

在 webUI 中,我试图在远程仓库的 master 分支中编辑一个文件,但出现以下错误,

"You’re editing a file in a project you don’t have write access to. 
Submitting a change to this file will write it to a new branch in your fork **my_username/runbooks**, so you can send a pull request."

我进一步阅读了这方面的内容,发现了以下陈述

对分叉存储库所做的更改可以通过拉取请求与原始存储库合并。拉取请求敲了仓库所有者并告诉他“我做了一些更改,如果你喜欢,请将这些更改合并到你的仓库”。另一方面,在本地机器(克隆存储库)上所做的更改可以直接推送到上游存储库。为此,用户必须具有存储库的写入权限,否则这是不可能的。如果用户没有写入权限,唯一的办法就是通过分叉请求。因此,在这种情况下,首先将在克隆存储库中所做的更改推送到分叉存储库,然后创建拉取请求。

因此,我转到了我组织的 github webui 存储库页面 (url - https://giturl/my_org_name/runbooks) 并单击了 fork。它说,

"You've already forked runbooks" 并向我展示了下面的 repo

my_username/runbooks

现在,根据我读到的声明,我可以将我的更改推送到我的 forked repo my_username/runbooks 并且然后创建一个拉取请求。正确的?但是在我的组织的 github webui runbooks 回购页面中,如果我点击“New Pull Request

在“比较变化”下,我看到如下

base: master   <---  compare: <drop_down>

当我点击 drop_down 时,我根本找不到 my_username/runbooks 存储库。

两个问题:

  1. 如何将我的本地 master 分支推送到我的分叉仓库 - my_username/runbooks?由于我无法在我的组织的存储库中创建新的远程分支,我是否需要以某种方式更改我的远程源?

    我的分叉回购的 url 如下所示

    https://giturl/my_username/runbooks?organization=my_username&organization=my_username

  2. 一旦我将本地 master 推送到我的分叉仓库 - my_username/runbooks, 如何在我的 my_org_name/runbooks 回购中创建拉取请求,因为 my_username/runbooks 也未在 [=71] 中列出=]base 或“比较更改”页面的 比较

抱歉,如果问题很基础。但我很难理解这一点,感谢任何帮助。

专业提示:切勿更改回购分支上的 master 分支,或来自上游的任何分支。您的主分支将从上游分叉,您将无法将上游拉入本地分支。

在您的工作流程中,更有意义的是在进行提交之前,创建一个新的本地分支,git checkout -b newpatchv2,然后提交给它。将 newpatchv2 推送到您的分支,然后在 upstream 存储库中创建一个 PR 以请求他们提取您的更改。他们可能不会按原样接受 PR,如果你的更改已经在你的 master 分支中,你将无法与远程主服务器同步备份,因为通过推送有不同的历史记录更改为您的本地 master(尚未)在上游并且可能永远不会(等待 PR 批准)。请记住,git 是一个 分布式 变更控制系统,其他贡献者的 PR 可能会在您自己的之前进入上游 master。

如果你最终分散了你的本地主分支,最简单的解决方法是将你的本地主分支分支到一个新分支(比如 old-master),然后删除你的本地主分支并拉回远程主分支吃下。与 master 同步后,保持这种状态 - 分支 offf master 进行更改,然后将这些更改拉回到 into master 只有当他们已经合并到上游主机。

现在让我们回答您的问题。

How to push my local master branch to my forked repo - my_username/runbooks ? Should I need to change my remote origin somehow since I cannot create a new remote branch in my org's repo?

由于 git 是一个 分布式 版本控制系统,因此拥有多个遥控器非常好。在这种情况下,您甚至可能有 3 个远程 - 您组织的远程、您的个人分支和组织分支的上游远程。 origin upstream 唯一特别之处在于,如果你克隆一个 repo,它会自动在本地 repo 中创建一个远程源,并将其命名为 origin.
您可以添加更多来源:

git remote add myfork https://github.com/.../..

那么你可以 git push myfork 而不是 git push origin。请注意,我没有指定分支。保持简单!在您认为自己是 git 专家之前,在 提交之前分支 并保持远程分支与本地分支相同。

Once I push my local master to my forked repo - my_username/runbooks, how to create a pull request in my my_org_name/runbooks repo as my_username/runbooks is not being listed either in the base or in the compare of "Compare Changes" page.

有一个“跨分支比较”按钮,可以让您select 为您的 PR 目的地选择不同的分支。请参阅 github 中的此文档以获取其外观的屏幕截图:

https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork