假设我们有:
C1--C2--C3--C6--C7 <- topic, HEAD
\ \ /
\ C4--C5
\
C8--C9 <- master
Run Code Online (Sandbox Code Playgroud)
(我们添加了一个空file1并提交C1,添加一个空file2并提交C2,等等).
然后我们做:
$ git rebase master
Run Code Online (Sandbox Code Playgroud)
结果是:
C1--C8--C9 <- master
\
C4'--C2'--C5'--C3'--C7' <- topic, HEAD
Run Code Online (Sandbox Code Playgroud)
我已经在这里创建了一个自动bash脚本,你可以根据需要进行测试.
正如我在git-scm.com一书中的第3.6章中所学到的,Git跳过了C6哪个是合并结果,所以C6'这里没有介绍.
我的问题是,Git使用哪个命令从topic分支中挑选?为什么结果...-C4'--C2'--C5'--C3'--C7'不是...-C2'--C3'--C4'--C5'--C7'(按时间顺序)?
如果上游分支已包含您所做的更改(例如,因为您邮寄了上游应用的补丁),则将跳过该提交.
但Git是如何做到的呢?
假设任何提交X都是commit 的父级Y,并且diffXY是git diff X Y命令的结果.我有以下提交:
o---o---o <- master
\
o---o---o---o <- test <- HEAD
Run Code Online (Sandbox Code Playgroud)
如果我做了git rebase master.那么我想的Git做跳绳承诺已经在master通过跳过任何承诺Y的test是diffXY已经在master.
我做了一些例子,它们就像我猜想的那样.
这只是我的猜测,我是对的吗?
另外,在Git重新应用test提交之前,Git是否会执行此跳过任务master?
从官方文档中,赋值0给元素意味着"没有设置标志"(例如None = 0),那么我为什么要在枚举中使用它呢?没有它我可以声明一个枚举吗?
我试着写一个没有的枚举None = 0,编译成功了.