2

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

我正在和其他人一起做一个项目,我的老板为此在 bitBucket 上创建了一个 repo。

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

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

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

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

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

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

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

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

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

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

谢谢你。

4

1 回答 1

3

没有分叉:分叉正在克隆 BitBucket 上的存储库以获取您自己的(在 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'是最新的master。您的推送在 BitBucket 方面是一个微不足道的合并:您只是在引入新的提交)

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


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

于 2012-11-19T07:03:47.407 回答