Хотя то, что я собираюсь предложить, вероятно, похоже на ответ из # 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
.
Надеюсь, это поможет.