更新分叉存储库和automerge

时间:2018-01-03 10:55:55

标签: git github merge

我已经在github上分叉了一个公共存储库,创建了一个修复问题的分支并提交了一个被接受的pull请求。 现在我想将我的fork更新到最新版本的公共存储库,从那时起已经有100多次提交。由于我的更改被接受,我只想获取最新的存储库而不从我自己的fork中合并任何东西。 然后我想在最新版本上创建一个新功能分支以提交进一步的修复。

我已阅读了几篇帖子,例如

处理这个问题,但这远非简单,因为git希望我合并它无法自动化的每一个提交。我在我的fork上更改了一两个文件,但是git希望我在我的fork上合并数百个文件。那是对的。

我基本上为我的PerfView克隆做了

  1. git clone https://github.com/Alois-xx/perfview.git
  2. git remote add upstream https://github.com/Microsoft/perfview.git
  3. git fetch upstream
  4. git checkout master
  5. git rebase upstream / master
  6. 然后我得到一个警告,我需要逐个合并数百个文件。

    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合并对话框显示

    enter image description here

    什么是来源和目标?我希望看到来源

    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并重新创建它,但由于我们有版本控制,因此应该有一个简单的方法。

2 个答案:

答案 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到上游存储库。