使用GIT fork / branches

时间:2012-11-19 06:13:01

标签: git branch fork

我正在使用Git一段时间但我仍然无法理解一些功能,尽管花了几个小时在博客和教程上......:)

我正在与其他人合作开展一个项目,我的老板在bitBucket上创建了一个回购。

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

我对我应该遵循的程序感到有点困惑。我应该创建自己的分支吗?或者叉子?

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

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

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

问题1:如果我在分叉版本中修改文件,我是否可以将它们推送到主分支?如何?

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

问题4:我的分叉版本的远程仓库是否与主仓库有关?

问题5:团队中的其他成员是否可以看到我的分叉版本内容?

如果有人能为我澄清这一点,我会很感激!

谢谢。

1 个答案:

答案 0 :(得分:3)

没有分叉:fork正在克隆BitBucket上的repo来获取你自己的(在BitBucket上):它是服务器方面的克隆。
有关插图,请参阅:

只有当你无法直接推送到上游仓库时才需要一个分支:你推送到你的分支,然后向上游仓库发出拉动请求。
这不是这种情况。

只需将您的分支分支并推送到您需要的唯一BitBucket存储库(您可以对其进行写访问)。

每当您进行修改时,您都需要在master和您的分支上发布

x--x--x                  (master => origin/master)
       \ 
        y--y--c--y--c--y (yourBranch  => origin/yourBranch)
  • 重新排序所述分支(rebase interactive)以使公共提交首先出现,
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'{{1}是最新的你的推送是BitBucket方面的一个简单的合并:你只是介绍新的提交)

  • master
    由于您已重新定位git checkout yourBranch && git push -f origin yourBranch,您已重写其历史记录,因此需要强行推送到BitBucket端。
    但是因为它是你的分支,所以没关系(没有其他人会从中取出它,并且需要重置它才能考虑到你的新历史)。


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