下面是一個簡單的方法,或者我希望在稍微研究一下後,它可以避免合併提交。
從文本和評論我看到你在做行軍,螞蟻招用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修復,或者你可以有你的功能 - 分支devs rebase到X'上並丟棄它們自己的X''s
Git有一個用於分支的'description'配置項。這裏是有用的就擺在結賬後鉤東西:
cat >>.git/hooks/post-checkout <<\EOF
#!/bin/sh
#
# if there's a stored note about this checkout, show it:
# $3 = 1 for a full branch checkout
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
使所有正則表達式匹配的音符c0ffee
消失。
你說錯誤是在'stable'中發現的,但是隻提到通過從'master'合併而達到穩定的代碼。當我讀到它時,這意味着這個錯誤在最後一次合併到'stable'之前被提交給'master'。它是否正確? – jthill
沒錯。從理論上講,所有的錯誤在被合併到穩定之前都應該被修正。但是,從來沒有「沒有錯誤」,所以有時它們會被合併,然後我們繼續在'master'上進行開發,然後才能被檢測到。 – CmdrMoozy
從註釋,你不想合併提交在主,是否合併提交從任何東西,但你試圖避免'功能',或只合並提交'穩定'? ......好的,「rebase工作流程」,從'feature'到'master'的所有合併都是快進? – jthill