Я не совсем уверен, почему вы делаете некоторые вещи в своем вопросе, например, разве вы не имеете в виду $git branch dev && git checkout dev
, прежде чем совершать коммиты?В любом случае, вы просто создаете их на master
.(Между прочим, если я прав, вы можете сделать git checkout -b dev
в качестве ярлыка.)
Причина, по которой вы просто получаете noop, заключается в том, что git rebase
пытается повторно применить все коммиты в текущем ветвь, которая не входит в ветку, указанную в качестве аргумента <upstream>
.Таким образом, когда вы делаете git rebase -i dev
в то время как на master
, в master
нет коммитов, которые не на dev
.По сути, вы хотите сделать это наоборот.Я бы сделал следующее:
git checkout dev
git rebase -i master
[... change to 'squash' all but the first of the actions ...]
Тогда у вашей ветви разработки будет только один сдавленный коммит, и вы можете объединить его с мастером, если хотите.
В качестве альтернативы, вы можете использовать git merge --squash
:
git checkout master
git merge --squash dev
git commit -m "The changes from dev squashed into one commit"
Тогда master
будет иметь один новый коммит, который представляет собой результат слияния dev
в мастер, сжатый в один коммит, и этот новый коммит будет иметь только одного родителя, а некоммит слияния.