【问题标题】:Git workflow for contributing small changes to a large collaborative project?为大型协作项目贡献小改动的 Git 工作流程?
【发布时间】:2012-04-15 14:53:26
【问题描述】:

我已经开始尝试通过在空闲时间提供小错误修复来为一个大型(大约一千万行 C++)、著名的开源项目做出贡献。该项目是用 Git 管理的,我对它完全陌生。我试图找到有关如何最好地使用它的信息,但我似乎只能找到关于琐事的复杂宗教论点,例如是否使用git fetchgit pull。谁能非常简单地告诉我,为了促进以下工作流程,我需要执行哪些命令?

  1. 查看完整源代码。
  2. 开始处理某些功能或错误修复
  3. 继续每天查看完整的源代码并将我迄今为止所做的更改与它合并。
  4. 生成一个包含我的树和远程主存储库之间所有差异的补丁
  5. (必要时)回滚自上次提交以来的所有更改
  6. (必要时)回滚我的树和远程主存储库之间的任何差异

【问题讨论】:

  • 这听起来像是答案可以填满一本书。其实已经有了:Pro Git
  • 天哪!我希望有人可以提供一个可以帮助我快速启动和运行的答案。如果这太复杂了,我想我将不得不辞职阅读这本书......
  • 这是一本非常好的书。

标签: git


【解决方案1】:
  1. 查看完整源代码。

    git clone git://url

  2. 开始处理某些功能或错误修复

    如果您同时处理多项事情,建议您这样做 为每个功能创建单独的分支。这些通常是 称为主题分支。

    git checkout -b <branch name> <desired base commit>

  3. 继续每天查看完整的源代码并合并我的更改,以便 远非如此。

    如果你使用主题分支,一个简单的git pull 就可以了。相反,如果 你正在处理master(你跳过了步骤(2)),那么我会 推荐使用git pull --rebase。这样你的工作将基于 上master in origin的最新提示。

  4. 生成一个包含我的树和我的树之间所有差异的补丁 远程主存储库

    一旦你确信你已经编写了一个没有错误的功能(好 运气!)您可以合并更改(如果您使用的是主题分支) 通过git merge master,解决任何冲突并提交。那么你就可以 生成你的补丁

    git format-patch <base commit for your feature>

  5. (必要时)回滚自我上次提交以来的所有更改

    要回滚,您可以使用git reset <options>。有几种 选项,我鼓励您将man git-reset 视为 差异非常微妙。如果你想摆脱你的工作 完全(你真的确定吗?),--hard 选项应该做 诡计。另一方面,如果您想恢复已提交的更改 通过单独的提交,git revert <commit> 是你的朋友。

  6. (必要时)回滚我的树和 远程主存储库

    不确定您的意思,但如果您的意思是更新本地存储库 随着上游的最新变化,我相信 (3) 解决了这个问题。

【讨论】:

    【解决方案2】:
    1$ git clone <repository> <directory>
    2$ <edit as you please>     # suggest 'git checkout -b <new branch>' prior to edit
    3$ git pull origin master
    4$ git push origin master    # you probably won't have permission for this, ask repo admins
    5$ git reset --hard
    6$ git checkout -b <new branch> origin/master   # not a rollback, just leave your stuff and shift to a new branch.
    

    【讨论】:

    • 谢谢!至于第 4 点,我所说的“生成补丁”并不是指推送到存储库。我的意思是生成一个可以发送到邮件列表或 bugzilla 的补丁文件。
    • 尝试'git diff'(默认创建补丁)
    • 您需要执行 'git pull' 以确保您从 'origin' 获得最新的,然后 'git diff origin/master' 以生成相关的差异'
    猜你喜欢
    • 2017-02-09
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2010-11-04
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多