虽然我即将建议可能类似于从#999064的答案,我会放弃它。
基本上你想要的是使用两个分支。 master
是您的所有公共工作所涉及的主要分支。 work
是您的私人分支。所以,你所做的只是当你想要改变为公开的时候,你可以在master
上做出提交。如果提交是私有的,则在work
分支上进行。
诀窍是将master
连续合并回work
。这样work
将具有master
的所有更改,但master
将只包含那些在master
上进行的提交。
那么你得到的是:
-- work --------- c -- e ------- h
/ /
-- master -- a -- b -- d -- f -- g
master
包含提交的a,b,d,F,G。 work
包含合并提交c(包含a,b),h(包含d,f,g)和常规提交e。
e仅在work
分支上,而所有其他提交(合并提交除外)都在两个分支上。
对于如何产生上图的一个例子:
# on branch master
# changes for a
git add .
git commit -m 'commit a'
# changes for b
git add .
git commit -m 'commit b'
# switch to work
# merge a and b (from master) into work, producing merge commit c
git checkout work
git merge master
# switch to master
# make commits d, f and g
git checkout master
...
# switch to work
# make commit e
# merge d, f and g (from master) into work, producing merge commit h
git checkout work
git merge master
所以你有两个遥控器,public
和private
。您将work
和master
改为private
,但您只需将master
改为public
即可。
我希望有帮助。
感谢您的回答。我之前已经考虑过子模块,但是他们对如何组织项目非常严格。我主要是在寻找一种方法来自动收集私人回购中的提交,并在公共场合一次性应用它们。 – 2011-02-04 09:04:44
嗯。听起来很有趣。我想到了这样的工作流可能具有的其他用例。 – 2011-02-04 13:15:49