我目前在我的master
分支上,我的舞台很脏。我不想承诺,我已经有太多的藏匿处存放我的变化(或者我太懒了?)。
我想快速转移一些分支而不切换到它们(记住,我的舞台很脏)。
我如何快速optim
到mobile
?还是optim
到master
(我目前的分支机构)?
答案 0 :(得分:2)
注意:分支名称只是指向(单个)提交的指针。我们倾向于将其视为“分支” - 整个提交链 - 通过从每个提交向后工作到其父代来找到。父母只记录在提交本身,而不是任何分支名称。将分支名称视为粘贴到某个特定提交的粘滞便笺可能会有所帮助。我不能在文本中绘制它,所以我在下面以箭头(<--
)绘制它。
将图像翻译成文本,旋转图像,做出一两个假设,然后截断一点以适应这个答案,你将展示:
o...
/
--o--M--o--o--o--o--o--o--o--o--o--o--o <-- mobile
/
---o <-- optim, origin/optim
(这里“更新”的东西是向右,而不是在上面,并且省略了各种提交消息的文本。)
在 1
时发生“快进”HEAD
是对分支名称的符号引用HEAD
提交是“待合并”提交的祖先。)由于optim
指向一个提交,其单个后代是合并提交M
,并且该提交对于右边的每个小o
都有一个后代,git可以滑动分支名称optim
沿着提交链前进。
因此:
$ git checkout optim; git merge mobile
将标签向上和向右滑动到M,然后再向右滑动到mobile
点的位置,给出:
o...
/
--o--M--o--o--o--o--o--o--o--o--o--o--o <-- mobile, optim
/
---o <-- origin/optim
如果您想“手动”执行此操作,而无需执行任何其他操作,甚至没有“打开”该分支,您只需告诉git“请重新指向分支名称optim
以定位相同的提交名称为mobile
:
$ git branch -f optim mobile
-f
(或--force
)标志表示继续更改现有标签的目标提交,而不是错误输出。
此命令不会检查操作是否为快进。 (当然普通git merge
只检查是否要进行快进合并或“真正”合并。但是,你可以要求git merge
做--ff-only
,即,如果操作不是快进,则输出错误。)
1 获取和推送也应用相同类型的“快进”概念,因此这是“何时”,但不是“仅当”。
答案 1 :(得分:2)
使用git push . mobile:optim
(是的,这是一个点)来快进optim
到mobile
。