git - git无法将我的本地分支与远程合并
问题描述
我克隆了我的组织的 git repo,如下所示
git 克隆 https://giturl/my_org_name/runbooks
它询问我的用户名/密码并成功克隆了它。
然后我检查了一个新的本地分支
git checkout -b patchv1
我做了几个提交。
然后我结帐到master并将我的patchv1分支与本地 master合并。
git结账大师
git 拉
git合并补丁v1
下面是我的 git 状态输出
状态
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 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)
我想将我的本地 主分支推送到远程来源,但名称不同。因此,我将以下命令与 -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 中,我尝试在远程 repo 的 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 repo 页面(url - https://giturl/my_org_name/runbooks)并点击了 fork。它说,
"You've already forked runbooks"
并向我展示了以下回购
我的用户名/运行手册
现在,根据我阅读的声明,我可以将我的更改推送到我的分叉存储库 my_username/runbooks,然后创建一个拉取请求。正确的?但是在我的组织的 github webui runbooks repo 页面中,如果我点击“ New Pull Request ”
在“比较更改”下,我看到如下
base: master <--- compare: <drop_down>
当我单击 drop_down 时,我根本找不到my_username/runbooks 存储库。
两个问题:
如何将我的本地主分支推送到我的分叉仓库 - my_username/runbooks?由于无法在组织的存储库中创建新的远程分支,我是否需要以某种方式更改远程来源?
我的分叉回购的网址如下所示
https://giturl/my_username/runbooks?organization=my_username&organization=my_username
一旦我将本地主服务器推送到我的分叉存储库 - my_username/runbooks,如何在我的my_org_name/runbooks 存储库中创建拉取请求,因为my_username/runbooks没有在基础或“比较更改”页面的比较中列出。
抱歉,如果问题非常基本。但我很难理解这一点,并感谢任何帮助。
解决方案
专业提示:永远不要更改master
回购分支上的分支,或来自上游的任何分支。您的主分支将从上游分支,您将无法将上游拉入本地分支。
在您的工作流程中,更有意义的是在进行提交之前,创建一个新的本地分支git checkout -b newpatchv2
,然后提交。推newpatchv2
送到你的 fork,然后在上游repo 中创建一个 PR 以请求他们拉入你的更改。他们可能不会按原样接受 PR,并且如果您的更改已经在您的master分支中,您将无法与远程 master 同步备份,通过将更改推送到本地 master(然而)在上游,可能永远不会(等待 PR 批准)。请记住,git 是一个分布式变更控制系统,其他贡献者的 PR 可能会先于您自己进入上游 master。
如果你最终分离了你的本地 master 分支,最简单的解决方法是将你的本地 master 分支到一个新的分支(比如 old-master),然后删除你的本地 master 分支并将远程 master 拉回。一旦您与 master 同步,请保持这种状态 - 分支master进行更改,然后仅在将这些更改合并到上游 master 时将这些更改拉回master。
现在让我们来回答你的问题。
如何将我的本地主分支推送到我的分叉仓库 - my_username/runbooks?由于无法在组织的存储库中创建新的远程分支,我是否需要以某种方式更改远程来源?
由于git
是分布式版本控制系统,因此拥有多个遥控器非常好。在这种情况下,您甚至可能有 3 个遥控器 - 您的组织的遥控器、您的个人分支以及组织分支的上游遥控器。上游唯一的特殊之处origin
在于,如果你克隆一个 repo,它会自动在本地 repo 中创建一个远程源,并调用它origin
。
您可以添加更多来源:
git remote add myfork https://github.com/.../..
然后你可以git push myfork
代替git push origin
. 请注意,我没有指定分支。保持简单!在您认为自己是 git 专家之前,请在提交之前进行分支,并保持远程分支与本地分支相同。
一旦我将本地主服务器推送到我的分叉存储库 - my_username/runbooks,如何在 my_org_name/runbooks 存储库中创建拉取请求,因为 my_username/runbooks 未列在基础或“比较更改”页面的比较中。
有一个“跨叉比较”按钮,应该允许您为 PR 的目的地选择不同的叉。请参阅来自 github 的此文档以获取其外观的屏幕截图:
推荐阅读
- python - 水平移动 Python Turtle 而不改变标题
- ios - 两个 UIViewController 之间的 UIPageViewController
- javascript - 使用 ES6 编写的 npm 模块和 react-scripts
- delphi - 检查时间段是否重叠
- typescript - 是否有任何其他语言支持 Typescript 的映射类型和条件类型功能?
- react-native - 为什么我的变量没有在 React Native 中正确传递?
- postgresql - PGAdmin / Postgres:无法将时间戳数据写入 Postgres (2018-04-18 05:40:28)
- verilog - 将 3 个触发器分配给敏感度列表
- ruby-on-rails - 在 Ubuntu 16.04 上安装 bcrypt (gcc: 错误:)
- ios - Alamofire 4.7 中的自定义 SessionManager 立即取消