这里有一种简单的方法,希望经过一些学习后会变得容易,它可以避免合并提交。
从文本和评论中我看到你正在使用master
和stable
进行虚线框技巧,其中唯一允许执行的操作(至少通常是这样)是快进式合并:
...--X--...S stable
\
m--...--M master
\
f--...--F feature
我建议如下,当你看到这个第一部分的丑陋结果时,请耐心等待:
我建议如下,当你看到这个第一部分的丑陋结果时,请耐心等待:
git checkout master -B m-temp # let's do this with nonce names at first
git revert X
# (maybe **amend** the commit to what X should have been here)
git checkout stable -B s-temp
git cherry-pick m-temp
git checkout feature -B f-temp
git cherry-pick m-temp
生产:
...--X--...S---X'' s-temp
\
m--...--M---X' m-temp
\
f--...--F---X''' f-temp
假设你所有的分支上都只有一个X的修复。这看起来很混乱,但是请注意快进合并实际上是什么。当需要将稳定版本与主版本同步时,你可以使用以下任何一种方法正确地完成。
git checkout s-temp # the slow way
git reset --hard @{1} # . (reset one commit from s-temp, i.e. to S)
git merge m-temp # .
或者使用以下代码,可以获得完全相同的效果:
git checkout -B s-temp m-temp # exactly the same, without the rube goldberg
每个人都在生产:
X'' <-- discarded cherry-pick of X'
/
...--X--...S---m--...--M---X' m-temp s-temp
\
f--...--F---X''' f-temp
...并且你的分支仍然都只有一个修复X的提交。当是合并到主分支时,也要这样做,将X'丢弃,让X'''成为你历史记录中唯一的X修复,或者你可以让你的特性分支开发者在X'上进行变基,并放弃他们自己的X'''。
Git对于分支有一个“描述”配置项,在post-checkout钩子中加入以下内容会很有用:
cat >>.git/hooks/post-checkout <<\EOF
if branch=`git symbolic-ref --short -q HEAD` && test $3 = 1; then
git config --get-all branch.$branch.description
fi
EOF
chmod +x .git/hooks/post-checkout
当你想要提醒自己某件事情时,
git config --add branch.stable.description \
"reset to commit c0ffee before merging master"
这使得挑选你想要的主修复程序变得非常容易。当你想要删除该注释时,
git config --unset branch.stable.description c0ffee
使所有与正则表达式匹配的注释消失。