我已经在github上分叉了一个公共存储库,创建了一个修复问题的分支并提交了一个被接受的pull请求。 现在我想将我的fork更新到最新版本的公共存储库,从那时起已经有100多次提交。由于我的更改被接受,我只想获取最新的存储库而不从我自己的fork中合并任何东西。 然后我想在最新版本上创建一个新功能分支以提交进一步的修复。
我已阅读了几篇帖子,例如
处理这个问题,但这远非简单,因为git希望我合并它无法自动化的每一个提交。我在我的fork上更改了一两个文件,但是git希望我在我的fork上合并数百个文件。那是对的。
我基本上为我的PerfView克隆做了
然后我得到一个警告,我需要逐个合并数百个文件。
C:\Source\git\PerfView_Fork\perfview>git rebase upstream/master
First, rewinding head to replay your work on top of it...
Applying: Updated HtmlJS directory to contain a stock ASP.NET 5 Service. We can use this to build the back end of the cross platform version of PerfView.
.git/rebase-apply/patch:9414: trailing whitespace.
The basic architecture for the app is there are two processes
.git/rebase-apply/patch:9416: trailing whitespace.
1. One that acts as a 'back end' that acts as a data model.
.git/rebase-apply/patch:9417: trailing whitespace.
This has no user interface and communiates to the UI by
.git/rebase-apply/patch:9419: trailing whitespace.
(that is a REST API) This is responsible for all data.
.git/rebase-apply/patch:9424: trailing whitespace.
2. A second process that
warning: squelched 4 whitespace errors
warning: 9 lines add whitespace errors.
error: Failed to merge in the changes.
Using index info to reconstruct a base tree...
M src/HtmlJs/documentation/DesignBasics.md
M src/HtmlJs/documentation/DevNotes.md
M src/PerfView/Properties/AssemblyInfo.cs
A src/PerfView/SupportDlls/UsersGuide.htm
Falling back to patching base and 3-way merge...
Auto-merging src/PerfView/Properties/AssemblyInfo.cs
CONFLICT (content): Merge conflict in src/PerfView/Properties/AssemblyInfo.cs
Auto-merging src/HtmlJs/PerfDataService/Views/static/help.html
Patch failed at 0001 Updated HtmlJS directory to contain a stock ASP.NET 5 Service. We can use this to build the back end of the cross platform version of PerfView.
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
我已经尝试过Visual Studio,它也遵循git工作流程,我必须处理每一个合并错误。这应该是一个常见的问题,可以跳过合并,只需从主服务器中取出分支,但到目前为止我无法找到令人满意的解决方案。
为什么我甚至需要合并我从未在分支(主要)上触及的文件,我从未做过任何提交?这对我来说毫无意义。 Visual Studio合并对话框显示
什么是来源和目标?我希望看到来源
https://github.com/Microsoft/perfview.git/master
和目标
https://github.com/Alois-xx/perfview.git/master
这有助于不盲目地合并错误的东西。真正令我感到不安的是,合并工具希望我对每个文件做出决定。至少在Visual Studio中似乎没有选项可以简单地从Source获取所有内容并完成它。
什么是神奇的命令行,无需手动合并数百个文件,即可批量更新我的fork?
git merge -Xtheirs ... ?
我曾尝试为我的fork创建一个pull请求,但github也抱怨手动合并是必要的。最简单的方法是删除我的fork并重新创建它,但由于我们有版本控制,因此应该有一个简单的方法。
答案 0 :(得分:0)
最简单的方法是将两个存储库克隆到不同的目录中。
然后我删除了除.git目录之外的Fork / Repo中的所有内容,然后我将Orig / Repo的内容复制到我之后提交的fork(.git目录除外)中。
这很简单,如果在没有合并任何内容的情况下执行rebase,您将获得提交消息的历史记录而不保存实际内容。当您更新fork时,您有一个包含所有更改的提交,如果您想查看自上一个fork以来的更改,那么这很好。
答案 1 :(得分:-2)
抱歉,我没有仔细阅读。
我想在最新版本上创建一个新的功能分支,以提交进一步的修复。
...
git clone https://github.com/Alois-xx/perfview.git git remote add upstream https://github.com/Microsoft/perfview.git git fetch upstream
git checkout -b next_feature upstream/master
<code, commit>
git push origin next_feature
<submit PR in github from Alois-xx:next_feature to Mictosoft:master>
大多数人(除非他们真的打算fork软件并将其提供给自己的用户)不需要做任何&#34; fork维护&#34;。特别是,不需要推送分支来创建PR到上游存储库。