- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们有分支 prod
用于生产版本和 dev
用于持续开发。
我们目前的流程:
我们主要在 dev
分支工作,客户不时决定他想要来 prod
的功能/错误修复,然后我们挑选它们。
根据我的理解,cherry-picks 与 git flow
模型相矛盾。
到目前为止,我不知道如何调整我们的流程来避免它。
git flow
假设您事先知道是否应该更改为 prod
社区是否有解决方法?
更新:我发现我的问题需要更好地澄清术语
我们现在使用的
实现一个问题 #12345
git fetch
git checkout origin/dev -B issue-12345 # new branch for issue #12345 from bug tracking system
# ... do many atomic commits
git fetch
git checkout origin/dev -B dev
git merge issue-12345 --no-ff -m "Bug #12345 - Bug title from bug tracking system"
# ... fix merge conflicts if any and commit
git branch -D issue-12345
git push
笔记
Merge 'issue-12345' into 'dev'
--no-ff
强制非快进 merge ,因为我们希望所有问题都表示为 merge 。因此 git log dev --first-parent
返回已完成任务的高级 View git merge --squash
及其 rebase 类似物。我们希望保留整个任务历史记录git fetch
git checkout origin/prod -B issue-12345
git log origin/dev --grep "#12345" --oneline --reverse # get all commits that have to be cherry-picked, usually that's only one merge commit (abcd1234)
git cherry-pick abcd1234 -x -m 1 # '-m 1' required for cherry-picking merge commit
# ... fix merge conflicts if any and commit
# ... repeat for other commit if any
git checkout origin/prod -B prod
git merge issue-12345-prod --no-ff -m "Bug #12345 - Bug title from bug tracking system"
# ... fix merge conflicts if any and commit (although that's unlikely for them to occur)
git branch -D issue-12345
git push
git flow
告诉我们做什么
dev
分支对应
develop
,
prod
对应
master
,没有使用 release 分支
git flow
,只有特征分支应该基于
dev
分支,并且它们永远不会 merge 到
prod
。
prod
,然后 merge 到
prod
和
dev
。
git flow
不适用于我们
prod
分支。 dev
的特征分支,我们将无法在稍后将其 merge 到 prod
中(如果需要的话)prod
的特征分支,我们将无法从之前完成的其他任务中受益。 Contact Us
页。然后我们有一个任务 #23456 将页面的背景颜色从白色更改为黄色。
issue-12345
的
prod
分支,然后将其 merge 到
dev
并等待批准将其 merge 到
prod
。
issue-23456
并再次基于
prod
。但是
prod
代码甚至还没有提到
Contact Us
页。所以我们必须做一些奇怪的事情,比如先将
issue-12345
分支 merge 到
issue-23456
中。
Feedback
页。此页面与
Contact Us
页面非常相似,因此具有相似的 css。我们想重用它。但是如何?说#34567 依赖于#12345 是不公平的。因此,将
issue-34567
建立在
issue-12345
上是不合逻辑的。所以呢?手动重写代码?复制粘贴?或者仍然是 cherry-pick ?
最佳答案
git-flow(见 here translated as regular git commands)基于 merge 分支(功能到 dev,dev 到 master)git cherry-pick
与 merge 不兼容,因为:
Their insight is that, with git (or any DAG-based SCM), if you can anticipate where a commit may/will be need to applied, you can put it on it’s own branch, and merge it into those various places as needed.
This will get the change applied to all the necessary branches (you can merge it into release as well as master), but not result in the commit getting copy/pasted. Instead, new merge commits will be recorded, so no new commit ids, and the history (what branches have this commit?) is tracked nicely in the DAG.
The con to not cherry picking is that you’ll need to know up front that you want your commit applied into multiple places, so that you can place it on it’s own branch.
integration
从
master
开始的分支与:
integration
创建的功能分支分公司integration
每次其他功能 merge 到 integration
时分支:这涉及与负责该功能分支的团队进行沟通,因为每次重新设置功能分支时,他们都必须重置自己的功能分支副本(因为它的历史会改变)integration
的结果, can be reverted at any time if that feature is dropped :所有其他尚未 merge 的功能分支需要在更新的 integration
之上重新调整自己分支。 integration
分支功能完整并已通过用户验收测试,将 merge 到
master
(或
prod
)
dev
或
integration
:
Day 1.
prod
=dev
=integration
prod
和
integration
在这里,以及功能或问题分支。
Day 2. Issue #1 raised. Here it is obvious. All branches are the same. So we can
git checkout prod -B issue-1
Day 3. Issue #1 fixed. Do we merge
issue-1
branch anywhere?
integration
Day 4. Issue #2 raised. Basing from integration branch again?
prod
.特别是如果它是一个问题(在
prod
中检测到)。
integration
开始,但由于功能将从
integration
中删除,早期集成的好处并不能保证。
Day 5. Issue #2 fixed. Merging anywhere?
integration
(
merge --no-ff
),检查问题 2 是否适用于问题 1。
Day 6. Issue #2 approved to get into prod. What do we do?
issue-2
顶部
prod
(如果产品从那时起已经发展了)
merge --no-ff issue-2
至
prod
.
integration
至
prod
,并将所有其他功能分支 merge 回
integration
,以验证它们是否在新产品(现在包括
issue-2
)之上一起发挥良好。
Day 7. Issue #1 approved to get into prod. What do we do?
issue-1
顶部
prod
:这将验证
issue-1
仍在工作,即使基于
issue-2
的顶部(之前已 merge 到
prod
中)。
merge --no-ff
,它会在
prod
中生成一个 merge 提交或
integration
从功能/问题分支:如果需要从
prod
删除所述功能/问题,您需要做的就是在
prod
中恢复唯一的 merge 提交。或
integration
(而不是恢复代表要删除的分支的一系列提交)。
关于git flow vs 樱桃选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34504807/
我时不时地输入“git”,然后想到别的东西,然后输入例如“git checkout master”。当然,这给我留下了 $ git git checkout master git: 'git' is
我做到了 git 克隆 git://foo.git 光盘富 ...编辑文件.. 现在我想重新开始。我不在乎我已经做出的任何改变,但我不想再次克隆整个巨型 foo.git,只是丢失我所有的更改。我怎
我在我的电脑上开发代码,我的计算节点很少。 为了让我的程序保持同步,我决定使用 git。以前,我以一种单向模式使用它来“下推”从 PC 到计算节点的更改。但是时不时遇到计算节点特有的小bug,现场修复
虽然它似乎什么也没做,但它没有给出任何警告或错误消息。有什么想法吗? 最佳答案 来自 Git 源的注释: /* * Read a directory tree. We currently ignor
我知道如何为这样的 HTTPS 请求提供用户名和密码: git clone https://username:password@remote 但我想知道如何像这样向 Remote 提供用户名和密码:
Git GUI、Git Bash 和 Git CMD 之间有什么区别?我是初学者,为了进行安装,我发现自己通常同时使用 git bash 和 git CMD 最佳答案 Git CMD 就像使用 git
有人能告诉我git中文件索引被删除是什么意思吗?这些文件在我的 VS Code 中标记为红色,但我仍然可以修改文件并将更改推送到将反射(reflect)这些更改的远程存储库。我认为这一切都是在我使用命
我通过 git 子树将 GLFV 库添加到项目中,但出现此警告“看起来您的 git 安装或您的 git-subtree 安装已损坏”。还描述了几个原因,为什么这可能是: 如 git --exec-pa
我有需要外部 git 项目的 repo,但我不想使用子模块,因为我想在 github 上存档所有文件,所以我认为我只是将具有 git repo 的整个目录添加到 git 但它不t 添加里面的 .git
我有需要外部 git 项目的 repo,但我不想使用子模块,因为我想在 github 上存档所有文件,所以我认为我只是将具有 git repo 的整个目录添加到 git 但它不t 添加里面的 .git
我一直在阅读一篇文章,作者在其中指示:在现有存储库中创建一个新存储库,并想知道这是否是他忽略的错误。稍后我会与他核实。 这些是我要检查的条件: 将现有目录制作成仓库的条件,并且已经 checkin 主
我确实在不同的计算机上处理相同的项目,我想知道是否有一种方法可以跟踪该 .git 文件夹,这样我就不必在所有本地文件中重新配置配置文件。 我将所有工作推送到 bitbucket。 最佳答案 不,没
这个问题在这里已经有了答案: How does git store files? (3 个答案) 关闭 9 年前。 我为我的许多项目创建了一个远程存储库,所以它是我的push 的目的地。与 git
应该如何在 git 中查看文件内容的完整历史记录? 一个文件在 git 中的历史很短,存储库通过 git-svn 同步,但在 svn 中的历史很长。 git 中的历史记录到达文件移动的位置。要查看历史
我是confused here ... 如何对修改后的文件进行git commit,以及如何对新文件进行git commit? 还有,你如何在git中单独提交文件? 最佳答案 git 提交过程分为两个
正在搜索 throw SO 来寻找答案。遇到这个似乎没有给出任何答案的旧线程。重新触发此线程,希望有人知道! 有人能告诉我 git subtree 和 git filter-branch 的区别吗?为
我想知道是否有一种方法可以避免在每个 Git 命令的开头键入单词 git。 如果有一种方法可以在打开命令提示符进入 “Git 模式” 后只使用一次 git 命令就好了。 例如: git> 之后,我们键
当您修改工作目录中的文件时,git 会告诉您使用“git add”暂存。 当您向工作目录添加新文件时,git 会告诉您使用“git add”开始跟踪。 我对这两个概念有点困惑,因为我假设跟踪文件的更改
为什么 git://有效 $ git clone git://github.com/schacon/grit.git Cloning into 'grit'... ... Checking conne
我在以下沙箱中练习 git:https://learngitbranching.js.org/?NODEMO 我在两个单独的 session 中运行了两组命令。第一组命令顺序如下: git clone
我是一名优秀的程序员,十分优秀!