2017-03-03 31 views
4

我正在帮助一些人参与一个项目,而我之前没有使用过Git,所以我很生疏,并希望得到正确的结果。我的git工作流是否正确并符合我的团队?

背景

没有分叉。我被建议直接复制回购,然后分支。

origin/master包含当前版本

origin/develop的产品代码包含了下一个版本

我的Git的工作流程草案

  1. 克隆的最新发展变化的代码回购本地机器:

    $ git clone <origin-url>

  2. 创建新的分支:

    $ git checkout -b newFeature develop

  3. 进行更改,阶段和提交它们:

    $ git add . 
    $ git commit -m "<message>" 
    
  4. 更改推到远程newFeature分公司(此分支不但在原产地回购存在):

    $ git push origin newFeature 
    
  5. 提交pull request将origin/newFeature合并为origin/develop

  6. 在接受拉请求删除本地分支:

    $ git branch -d newFeature

问题

  • 难道我就在想,我需要确保我的本地develop在推动我的之前,分支已经与origin/develop保持同步分支?这样,我会帮助我的同事避免合并冲突,并允许快速合并?

  • 这样做的最佳方法是什么?我应该定期将origin/develop分支转移到本地计算机吗?

  • Will Git会通知我,当我尝试推送分支时代码不是最新的?它会阻止推动吗?

  • 是否有必要在第2阶段专门分支develop?如果我只是使用这个命令,这有什么关系吗?

    $ git checkout -b newFeature

+0

我在批准PR后做的事情是将我的分行与当前的分行重新分配。所以我可以在本地解决合并冲突,我的分支是最新的开发。在此之后,我强制推回到我的原点/ newFeature并合并。 –

+0

有一点需要注意,你可能需要'git push -u origin newFeature'来首次推送你的特性分支(尽管这取决于你的推送。默认'设置和Git版本:默认情况下这是自Git 2.0以来必需的,但在早期的Gits中不是这样)。 – torek

回答

2

难道我就在想,我需要确保我的本地开发分支是最新的原产/开发之前,我推了我newFeature分支?这样,我会帮助我的同事避免合并冲突,并允许快速合并?

是的。在你做你推:

git checkout develop 
git pull origin develop 
git checkout newFeature 
git rebase develop 

这假定没有其他人作为工作的newFeature,为您的方案。如果其他人也得到了你的分支,那么rebase可能需要与他们进行额外的沟通,否则你可能会(虽然我个人很讨厌这个问题,尽管大多数人都是这样做的),合并develop改为newFeature

这样做的最佳方法是什么?我应该定期将原产地/开发分公司拉到本地机器吗?

绝对。使用git,你可以尽可能频繁地进行提交,拉取和推送。你越早做这件事,就越不可能得到一个怪物合并,这让你毫无出路(因为你无法理解巨大的变化是怎么做的)。较小的单位更容易处理。

Will Git通知我,当我尝试推送分支时代码不是最新的?它会阻止推动吗?

是的,它不会允许,并给你一个有意义的消息。你只能推动快进,或者如果快速前进是不可能的(例如,你分道扬,),你可以进行强制推进,就像替换目标一样,并且会让你与同事陷入困境除非你是“所有人的主人”。在推动时你永远不能做隐式合并,它是“无论/还是”,按设计。

请注意,这里的例外是“您的”newFeature分支,假设您是唯一处理它的分支。然后,如上图所示,在您重新绑定之后,您将完全发生这种“被阻止”的情况,并且您必须使用“--force”才能将其发送到远程。只要没有其他人拉你的分支,并努力工作,这是好的,但。

第2阶段是否需要专门分支开发?如果我只是使用这个命令,这有什么关系吗? git checkout -b newFeature

该命令将分支出工作目录中当前分支的任何内容,因此从理论上说,如果您感到困惑,它可能会出错。在克隆之后,默认情况下,master分支处于活动状态。所以是的,你需要明确地指定develop,或者事先做一个git checkout develop