Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git rebase说什么都不做_Git_Rebase - Fatal编程技术网

git rebase说什么都不做

git rebase说什么都不做,git,rebase,Git,Rebase,我有以下分支机构、master和2个其他分支机构(b1和b2): 我想重新设置b分支的基础,使其父级为主级: / - a1 m1 \ - b1 如果我使用git-rebase-master或git-rebase-origin/master,我会得到当前分支b是最新的。这似乎是错误的,但我认为这与b在某些方面已经植根于master这一事实有关。我必须使用-,这似乎也是错误的 老实说,在这种情况下,您可以选择b1提交到来自master的新分支上: # from b git reset --ha

我有以下分支机构、master和2个其他分支机构(b1和b2):

我想重新设置b分支的基础,使其父级为主级:

 / - a1
m1
 \ - b1

如果我使用
git-rebase-master
git-rebase-origin/master
,我会得到
当前分支b是最新的
。这似乎是错误的,但我认为这与b在某些方面已经植根于master这一事实有关。我必须使用-,这似乎也是错误的

老实说,在这种情况下,您可以选择
b1
提交到来自
master
的新分支上:

# from b
git reset --hard master
git cherry-pick b1
如果要使用重基选项,请使用
--on

# from b
git rebase --onto m1 a1

上面提到要重新设置
b
分支的基础,这样父级为
a1
commit(仅为
b1
commit)的commit现在应该位于一个新的基础上,特别是commit
m1

,所以在我发布这篇文章后不久,我就理解了问题:命令

git rebase master 
从当前分支获取所有提交,一直追溯到从第二个参数ie
master
分支的第一次提交,并将它们重新设置到
master
头上

为了澄清为什么这不起作用,让我们在我的原始图表中添加更多的提交:

                      /- b1 - b2
            /- a1 - a2
m1 - m2 - m3
其中以“m”开头的提交位于
master
分支上(因此
master
头部位于
m3
),以“a”开头的提交位于
a
分支上(因此
a
头部为提交
a2
),同样,对于“b”(因此
b
头部为
b2
)。我的目标是以这样的方式结束:

            /- a1 - a2
m1 - m2 - m3
            \- b1 - b2
我试过的命令基本上与

git pull
git checkout b
git rebase master
问题是,“直到从
master
分支的第一次提交”包括分支
a
上的提交,所以git将尝试将
a1-a2-b1-b2
重设到
master
的头部,即
m3
。这个提交序列已经植根于
m3
,所以git正确地说没有什么可做的


我不得不改为
git-rebase-to-master a
,意思是“将当前分支(即
b
)重新基址到
master
,但只有在分支
a
”的头提交之后,即“rebase
b1-b2
m3

它可以在一次拍摄中完成,如下所示:

git rebase --onto master a b

你告诉我,在掌握构成分支b的所有修订的基础上重新设置基础,但放弃作为分支b历史一部分的修订。。。换句话说,将修订版b1放在母版的顶部(创建b1'),将b设置为指向b1'。

这不是一个很好的解释。它面临着与问题相同的问题,即对分支是什么的误解。这个解决方案和你在一个更好的答案中已经被告知的没有什么不同。@matt你是对的,我完全重写了它,我希望这更好。
git rebase --onto master a b