我在git中有分支和合并的问题。 我们有以下分支机构(这是我们的产品,并且在客户安装和支持时都保持平行)
2015Edition1
2015Edition2
2016Edition1
2016Edition2
master
我们可以将这些分支视为发布分支。
问题如下。
2015Edition1
已分支,修复程序将提交到分支fix1
。
2015Edition1
fix1\-- bugfix
修复程序合并回2015Edition1
并释放。
2015Edition1--------------merge
fix1\-- bugfix --/
然而,由于二进制帮助文件,许多依赖于产品的图像等,分支2015Edition2
,2016Edition1
,2016Edition2
差别很大,并且源代码中的更改是从未合并回主人。
有没有办法合并fix1
分支,只能在fix1
我想要的结果如下:
2015Edition1--------------merge--
fix1\-- bugfix --/
\
----------merge--
2016Edition2fix/
2016Edition2 --
我知道我可以将其提交到其他分支机构。但这是一个非常简单的例子。而且我认为我失去了跟踪提交存在的分支机构的能力。
任何意见和建议
答案 0 :(得分:1)
我认为这里的问题是你正在尝试维护多个长期运行的分支,而这不是Git的工作方式。
假设您有三个分支,release1
,release2
,release3
:
* 3d3 (release3)
* 28d
* e38
* b51
| * 27a (release2)
| * df1
| | * 948 (release1)
| | * ce3
| |/
|/|
| |
|/
* 166 (master)
* 6f0
* 1e8
如果您向release1
添加新提交,并且想要将其提交到release2
,则最终会将ce3
和948
与其一起带来。< / p>
这会很快变得混乱,你最终会忘记合并成什么。由于代码差异很大,也许你应该考虑将分支移动到它们自己的独立存储库中,并将代码的公共区域提取到可分发的库/包中(它也可能进入它自己的存储库)。
答案 1 :(得分:0)
您可以按照以下步骤操作:
git status
git add
(如果您可以修改或添加任何文件)git commit -m "<message>"
git push origin <your branch>
git checkout <main branch>
git pull origin <main branch>
git merge <your branch>
git push origin <main branch>
这是在Git中提交和合并的正确方法。请不要使用
git add .
,您可以使用git add <file path>
答案 2 :(得分:0)
您可以使用以下脚本在合并到主分支之前压缩功能分支提交。
# brief: This script should be run from within your git repo. You need to have your feature branch
# checked out. This will squash all the commits on your feature branch (assuming you
# branched from master). Then you can just use the github PR UI to merge the PR in. You need to have
# feature branch checked out when you run this script (git checkout feature branch).
# usage: git-helper-squash-all-commits <final commit messsage ex: "reorganizing directory structure"
# example: git-helper-squash-all-commits "reorganizing directory structure"
#!/bin/sh
set -ex
FINAL_COMMIT_MESSAGE=$1
BRANCH_YOU_BRANCHED_FROM=master
CURRENT_BRANCH=`git rev-parse --abbrev-ref HEAD`
COMMIT_HASH=`git merge-base HEAD $BRANCH_YOU_BRANCHED_FROM`
git reset --soft $COMMIT_HASH
git commit -am "$FINAL_COMMIT_MESSAGE"
git push origin $CURRENT_BRANCH --force
答案 3 :(得分:0)
好的,我通过重新排列错误修复解决了这个问题。我从一开始就做错了。 对我有用的解决方案是在分支之间找到合并库提交,在合并库中创建一个分支。然后樱桃挑选错误修正提交到该分支。(我想我可以在新分支上完成一个rebase),然后将新分支合并到其他包含错误修复的分支中:
$git merge-base 2015Edition1 2016Edition2 (earliest vs latest release)
5a5def
$git checkout -b bugfix-branch 5a5def
$git cherry-pick -x bug-fix-commit
$git checkout 2016Edition1
$git merge bug-fix-branch
$git checkout 2015Edition2
$git merge bug-fix-branch
.... and so on.
这似乎是解决问题的方法。我的错误是我没有从正确的提交中分支出来。 对此有何评论?这是以“正确”方式解决问题的方法吗?