我的git工作流程是否正确,并符合我的团队要求?

4

我正在帮一些人完成一个项目,但我之前从未使用过Git进行协作,因此我的技巧有些生疏,希望能够正确操作。

背景

没有分支。建议直接克隆存储库,然后创建分支。

origin/master 包含当前发布的生产就绪代码。

origin/develop 包含下一个版本的最新开发更改的代码。

我的Git工作流程草稿

  1. Clone the repo to my local machine:

    $ git clone <origin-url>

  2. Create new branch:

    $ git checkout -b newFeature develop

  3. Makes changes, stage and commit them:

    $ git add .
    $ git commit -m "<message>"
    
  4. Push changes to remote newFeature branch (this branch does not yet exist in the origin repo):

    $ git push origin newFeature
    
  5. Submit a pull request to merge origin/newFeature into origin/develop.

  6. Delete the local branch upon acceptance of pull request:

    $ git branch -d newFeature

问题

  • 我是否应该确保本地的develop分支与origin/develop保持同步,然后再推送我的newFeature分支呢?这样做可以帮助我的同事避免合并冲突,并允许快进合并,是吗?

  • 如何才能做到最好呢?我应该定期从本地机器上拉取origin/develop分支吗?

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

  • 在第2个阶段,是否有必要特别从develop分支分支出来?如果我只使用以下命令,会有什么问题吗?

    $ git checkout -b newFeature


当我的PR被批准后,我会将我的分支与当前的develop分支进行rebase。这样我就可以在本地解决合并冲突,并且我的分支也与develop保持最新状态。之后,我会强制推送回我的origin/newFeature并进行合并。 - Stefan F.
有一个需要注意的地方,你可能需要在第一次推送功能分支时使用 git push -u origin newFeature 命令(尽管这取决于你的 push.default 设置和 Git 版本:自 Git 2.0 起默认需要此命令,但在早期版本中不需要)。 - torek
1个回答

2

我是否正确地认为,在推送我的newFeature分支之前,我需要确保我的本地develop分支与origin/develop保持最新状态?这样做可以帮助我的同事避免合并冲突,并允许快进式合并吗?

是的,在进行推送之前:

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

假设在您的场景中没有其他人为newFeature工作过。如果还有其他人也获取了您的分支,那么rebase可能需要与他们进行额外的沟通,或者你可以合并developnewFeature (尽管我个人不喜欢这样做,因为从各个方面来看都是完全错误的,但大多数人都是这样做的)。

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

当然。使用 Git 时,您尽可能经常地提交、拉取和推送。越早这样做,就越不可能出现垃圾合并,这会让你陷入困境(因为你无法理解巨大的更改)。较小的单元要容易得多。

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

是的,它不允许这样做,并向您提供有意义的提示信息。您只能推送快进,或者如果无法进行快进(即,您发生了分歧),则可以进行强制推送,就像替换目标一样,并会让您与同事陷入麻烦,除非您是“万能的”。您永远不能在推送时进行隐式合并,这是按设计来实现的。

请注意,“您”的newFeature分支是例外,假设您是唯一在该分支上工作的人。然后,在上面显示的重新设置后,您将正好处于此“已阻止”状态,必须使用“--force”将其推送到远程。只要没有其他人拉取您的分支并对其进行了操作,尽管这样做没问题。

在第2阶段需要专门从develop进行分支吗?如果我只使用此命令,是否有影响?git checkout -b newFeature

此命令是基于当前工作目录中的当前分支进行分支,因此理论上如果您感到困惑,它可能会出错。默认情况下,在克隆之后,master分支处于活动状态。因此,是的,您将需要明确指定develop,或者先运行git checkout develop


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接