【问题标题】:Should I create a branch of the fork while creating PR for apache kafka? [duplicate]我应该在为 apache kafka 创建 PR 时创建 fork 的分支吗? [复制]
【发布时间】:2018-01-25 03:05:27
【问题描述】:

我计划为 Kafka 开源做出贡献。我将 Kafka 分叉到我的 git hub 帐户中。 然后我在本地克隆了它。现在,我应该在 master 中进行更改还是应该在本地创建一个以票命名的分支?

【问题讨论】:

    标签: git github apache-kafka


    【解决方案1】:

    创建一个分支来实现功能或错误修复,将您的分支推送到您自己的存储库(您的 fork),然后打开一个拉取请求以将您的分支合并到您的 fork 中,与主分支(通常为 master)在Kafka 官方存储库。

    以下是在 GitHub 上为项目做出贡献时标准工作流程的更详细说明:

    GitHub 标准分叉和拉取请求工作流程 https://gist.github.com/augustoproiete/256b560d008d39afc0814a19f41a1d49


    无论您是想回馈开源社区还是在自己的项目上进行合作,了解如何正确分叉和生成拉取请求都是必不可少的。不幸的是,当您最初学习该过程时,很容易犯错误或不知道应该做什么。我知道我一开始确实遇到了相当大的麻烦,而且我发现 GitHub 上和互联网上的很多信息都相当零碎和不完整——这里描述的过程的一部分,那里描述的另一个过程,不同地方的常见挂断,等等。

    为了为我自己和其他人收集这些信息,我发现这个简短的教程是创建分叉、完成工作、发出拉取请求并将拉取请求合并回的相当标准的程序原来的项目。

    创建分叉

    只需前往 GitHub 页面并单击“Fork”按钮。就是这么简单。完成后,您可以使用您最喜欢的 git 客户端来克隆您的 repo 或直接进入命令行:

    # Clone your fork to your local machine
    git clone git@github.com:USERNAME/FORKED-PROJECT.git
    

    让你的叉子保持最新

    虽然这不是绝对必要的步骤,但如果您打算做的不仅仅是一个微小的快速修复,您需要通过跟踪原始“上游”存储库来确保您的分支保持最新状态你分叉了。为此,您需要添加一个遥控器:

    # Add 'upstream' repo to list of remotes
    git remote add upstream https://github.com/UPSTREAM-USER/ORIGINAL-PROJECT.git
    
    # Verify the new remote named 'upstream'
    git remote -v
    

    每当您想使用最新的上游更改更新您的分支时,您需要首先获取上游存储库的分支和最新提交,以将它们带入您的存储库:

    # Fetch from upstream remote
    git fetch upstream
    
    # View all branches, including those from upstream
    git branch -va
    

    现在,检查你自己的 master 分支并合并上游 repo 的 master 分支:

    # Checkout your master branch and merge upstream
    git checkout master
    git merge upstream/master
    

    如果本地 master 分支上没有唯一提交,git 将简单地执行快进。但是,如果您一直在对 master 进行更改(在绝大多数情况下,您可能不应该这样做 - 请参阅下一节,您可能必须处理冲突。这样做时,请注意尊重上游所做的更改。

    现在,您的本地 master 分支是最新的,所有内容都在上游进行了修改。

    做你的工作

    创建一个分支

    每当您开始处理新功能或错误修复时,创建一个新分支非常重要。它不仅是正确的 git 工作流程,而且还可以使您的更改井井有条并与主分支分开,以便您可以轻松地为您完成的每项任务提交和管理多个拉取请求。

    创建一个新分支并开始工作:

    # Checkout the master branch - you want your new branch to come from master
    git checkout master
    
    # Create a new branch named newfeature (give your branch its own simple informative name)
    git branch newfeature
    
    # Switch to your new branch
    git checkout newfeature
    

    现在,去镇上乱砍乱砍,做任何你想做的改变。

    提交拉取请求

    清理你的工作

    在提交您的拉取请求之前,您可能需要做一些事情来清理您的分支,并使原始存储库的维护者能够尽可能简单地测试、接受和合并您的工作。

    如果对上游主分支进行了任何提交,您应该重新设置您的开发分支,以便合并它是一个简单的快进,不需要任何冲突解决工作。

    # Fetch upstream master and merge with your repo's master branch
    git fetch upstream
    git checkout master
    git merge upstream/master
    
    # If there were any new commits, rebase your development branch
    git checkout newfeature
    git rebase master
    

    现在,可能需要将一些较小的提交压缩为少量更大且更具凝聚力的提交。您可以使用交互式变基来做到这一点:

    # Rebase all commits on your development branch
    git checkout 
    git rebase -i master
    

    这将打开一个文本编辑器,您可以在其中指定要压缩的提交。

    提交

    一旦您将所有更改提交并推送到 GitHub,请转到 GitHub 上的 fork 页面,选择您的开发分支,然后单击拉取请求按钮。如果您需要对拉取请求进行任何调整,只需将更新推送到 GitHub。您的拉取请求将自动跟踪您的开发分支上的更改并进行更新。

    接受和合并拉取请求

    请注意,与前面的部分是从创建分叉并生成拉取请求的人的角度编写的不同,本部分是从处理传入拉取请求的原始存储库所有者的角度编写的。因此,“forker”将原始存储库称为 upstream,我们现在将其视为原始存储库的所有者和标准的 origin 远程。

    签出和测试拉取请求

    打开.git/config 文件并在[remote "origin"] 下添加一个新行:

    fetch = +refs/pull/*/head:refs/pull/origin/*
    

    现在您可以获取和签出任何拉取请求,以便测试它们:

    # Fetch all pull request branches
    git fetch origin
    
    # Checkout out a given pull request branch based on its number
    git checkout -b 999 pull/origin/999
    

    请记住,这些分支将是只读的,您将无法推送任何更改。

    自动合并拉取请求

    如果合并是简单的快进,您只需单击 GitHub 上拉取请求页面上的按钮即可自动执行合并。

    手动合并拉取请求

    要手动进行合并,您需要在源代码库中签出目标分支,直接从 fork 中拉取,然后合并和推送。

    # Checkout the branch you're merging to in the target repo
    git checkout master
    
    # Pull the development branch from the fork repo where the pull request development was done.
    git pull https://github.com/forkuser/forkedrepo.git newfeature
    
    # Merge the development branch
    git merge newfeature
    
    # Push master with the new feature merged into it
    git push origin master
    

    现在您已经完成了开发分支,您可以随意删除它。

    git branch -d newfeature
    

    版权

    版权所有 2017,蔡斯·佩蒂特

    MIT 许可证,http://www.opensource.org/licenses/mit-license.php

    补充阅读

    来源

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多