【问题标题】:Use GIT fork / branches使用 GIT 分叉/分支
【发布时间】:2012-11-07 01:34:24
【问题描述】:

我使用 Git 已经有一段时间了,但尽管在博客和教程上花费了数小时,但我仍然无法理解某些功能...:)

我正在与其他人合作一个项目,我的老板为此在 bitBucket 上创建了一个 repo。

我在本地克隆了它,并且已经对 master 分支进行了一些提交,并从其他人那里提取了一些更改。我现在想长期进行修改。我将不得不将其中一些推送到主分支,并为自己保留其他的。我认为我可以 fork 主分支来拥有自己的版本(?)。

我对我应该遵循什么程序有点困惑。我应该创建自己的分支吗?还是分叉?

如果我是对的,分叉将在我的 BitBucket 帐户中创建另一个版本,我应该将其复制到我的计算机上(在与主分支项目不同的目录中?)以便进行修改。

另一方面,在我看来,GIT 的一个很棒的特性是可以在具有所有不同现有分支的单个目录中本地工作,从一个分支切换到另一个分支,并在您的远程仓库中推送您的修改完成(并可能到主分支)。

在决定之前,我有几个问题要问你们:

问题 1:如果我在我的 fork 版本中修改文件,我可以将它们推送到 master 分支吗?怎么样?

问题 2:如何将其他用户的新提交(在主分支上)合并到我的分叉版本中?

问题 4:我的分叉版本的远程仓库与主仓库有什么关系吗?

问题 5:我的分叉版本内容会被团队的其他成员看到吗?

如果有人能为我澄清这一点,我将不胜感激!

谢谢。

【问题讨论】:

    标签: git branch fork


    【解决方案1】:

    没有分叉:分叉正在 BitBucket 上克隆该存储库以获取您自己的(在 BitBucket 上):它是 服务器 端的克隆。
    参见,插图:

    仅当您无法直接推送到上游存储库时才需要分叉:您推送到您的分叉,然后向上游存储库发出拉取请求。
    这不是这里的情况。

    只需分支并将您的分支推送到您需要的唯一一个 BitBucket 存储库(您拥有写入权限)。

    无论何时您需要在master 和您的分支上发布修改,

    x--x--x (master => origin/master) \ y--y--c--y--c--y (yourBranch => origin/yourBranch)
    • 重新排序所述分支(rebase 交互式),以使常见提交首先出现,
    x--x--x (master => origin/master) \ c--c--y--y--y--y (yourBranch => origin/yourBranch)
    • git pull master(为了确保您本地克隆上的 master 反映其他人在 BitBucket 上发布的最新提交)
    x--x--x--x--x (master => origin/master) \ c--c--y--y--y--y (yourBranch => origin/yourBranch)
    • master 之上重新建立您的分支并测试所有内容是否仍能编译并通过测试
    x--x--x--x--x (master => origin/master) \ c--c1-y--y--y--y (yourBranch => origin/yourBranch)
    • 将新的常见提交从您的分支合并到master:
      git checkout master; git merge c1
    x--x--x--x--x--c--c1 (master => origin/master) \ y--y--y--y (yourBranch => origin/yourBranch)
    • git push master(因为你在推送之前拉了master:你的本地master相对于BitBucket'origin'master是最新的。你的推送是一个微不足道的合并BitBucket 方面:您只是在引入 new 提交)

    • git checkout yourBranch && git push -f origin yourBranch
      由于你已经 rebase yourBranch,你已经改写了它的历史,你需要强制推送到 BitBucket 端。
      但是因为它是你的分支,所以没关系(没有其他人会从它那里拉出来,并且需要重置它以考虑你的新历史)。


    请注意,另一种避免使用rebase --interactive 步骤来重新排序常见提交的方法是将它们直接从yourBranchmaster cherry-pick
    但我不喜欢樱桃采摘,因为它:

    【讨论】:

      猜你喜欢
      • 2017-08-31
      • 2014-06-20
      • 1970-01-01
      • 2014-11-19
      • 2015-02-11
      • 2014-09-08
      • 1970-01-01
      • 2011-06-02
      • 2012-06-19
      相关资源
      最近更新 更多