我正在使用Git一段时间但我仍然无法理解一些功能,尽管花了几个小时在博客和教程上......:)
我正在与其他人合作开展一个项目,我的老板在bitBucket上创建了一个回购。
我在本地克隆了它,并且已经对主分支进行了一些提交,并且其他人也进行了一些更改。我现在想要长期修改。我将不得不将其中一些推送到主分支,并为自己保留其他分支。我认为我可以分叉主分支拥有自己的版本(?)。
我对我应该遵循的程序感到有点困惑。我应该创建自己的分支吗?或者叉子?
如果我是对的,分叉会在myy BitBucket帐户中创建另一个版本,我应该在我的计算机上复制(在与主分支项目不同的目录中?),以便进行修改。
另一方面,在我看来,GIT的一个很棒的功能是在一个目录中本地工作,具有所有不同的现有分支,从一个分支切换到另一个分支,并在你的远程仓库中推送你的修改完成(可能还有主分支)。
在决定之前,我有几个问题要问你们:
问题1:如果我在分叉版本中修改文件,我是否可以将它们推送到主分支?如何?
问题2:如何将其他用户的新提交(在主分支上)合并到我的分叉版本中?
问题4:我的分叉版本的远程仓库是否与主仓库有关?
问题5:团队中的其他成员是否可以看到我的分叉版本内容?
如果有人能为我澄清这一点,我会很感激!
谢谢。
答案 0 :(得分:3)
没有分叉:fork正在克隆BitBucket上的repo来获取你自己的(在BitBucket上):它是服务器方面的克隆。
有关插图,请参阅:
只有当你无法直接推送到上游仓库时才需要一个分支:你推送到你的分支,然后向上游仓库发出拉动请求。
这不是这种情况。
只需将您的分支分支并推送到您需要的唯一BitBucket存储库(您可以对其进行写访问)。
每当您进行修改时,您都需要在master
和您的分支上发布
x--x--x (master => origin/master) \ y--y--c--y--c--y (yourBranch => origin/yourBranch)
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 --interactive
到yourBranch
cherry-pick
。
但我不喜欢采摘樱桃,因为它:
master
和yourBtranch
之间进行的最终合并复杂化。