Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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 为什么在重定基址时不移动当前分支?_Git_Git Rebase - Fatal编程技术网

Git 为什么在重定基址时不移动当前分支?

Git 为什么在重定基址时不移动当前分支?,git,git-rebase,Git,Git Rebase,我目前在dev分支上,对local/dev分支有一些更改 ... 我确实重新设定了基准: $git-rebase-dev-local/dev 已创建autostash:92915886 应用autostash。 已成功重新设置和更新分离的头部。 提交已重设基础,但未更新dev指针: 阅读曼吉特再基地: 提交在当前分支中所做但不在当前分支中的所有更改 保存到临时区域 **这是第二张图片上标记为的提交 当前分支已重置为 **上游是dev。所以我现在在dev 然后将提交重新应用于当前分支 **

我目前在
dev
分支上,对
local/dev
分支有一些更改

...

我确实重新设定了基准:

$git-rebase-dev-local/dev
已创建autostash:92915886
应用autostash。
已成功重新设置和更新分离的头部。
提交已重设基础,但未更新
dev
指针:

阅读
曼吉特再基地

提交在当前分支中所做但不在当前分支中的所有更改 保存到临时区域

**这是第二张图片上标记为
的提交

当前分支已重置为

**
上游
dev
。所以我现在在
dev

然后将提交重新应用于当前分支

**提交将重新应用于
dev

git push local -f HEAD:dev
为什么
dev
指针没有用
头移动到顶部?

我应该应用一些选项将当前的
dev
移动到
头部的顶部吗

更新
这是非常非常严重的。当
dev
local/dev
不一致并且可以被转发时,我的
dev
被移动到顶部,因为我需要工作。没有任何额外费用

git branch -f dev
git checkout dev
历史如何看待再基础: 以及在重新设定基础后如何:
本地/dev
是一个远程分支。它不会仅仅因为你想重新设定基准而移动。它将在
分离头中完成,然后由您推到
本地/dev

git push local -f HEAD:dev
您还可以将
dev
移动到
HEAD
,然后将其签出:

git branch -f dev
git checkout dev

我找不到自动将
dev
分支移动到
HEAD
的选项

但在重新设置基址后,我可以返回到
dev
,快速前进到
c1692f

$ git checkout dev
$ git merge --ff-only c1692f
结果如下:

为什么
dev
指针没有移动到带有
头的顶部因为它在重基期间不是当前分支

仔细阅读这本书。它在第一段中解释:

是以下各项的快捷方式:

git switch local/dev
git rebase dev
重基期间的当前分支为
local/dev
;这是唯一一个受再基准影响的分支


*
不需要是分支。任何标识提交的引用(分支、标记、提交、
HEAD
HEAD^2
HEAD@{1}
等)都可以用作

另一方面,
,需要是一个分支,因为作为重基的结果,它将移动到另一个提交


使现代化 您对文档的解释不正确。你在问题中说:

当前分支被重置为

**上游是dev,所以我现在在dev上

该点上的当前分支不一定是
dev
(事实上,它是
local/dev
,如上所述)

“当前分支重置为
”并不意味着
成为当前分支,而是意味着当前分支(
local/dev
)被移动到
标识的提交。Git在这一点上所做的工作相当于Git重置--hard


更新#2 上面的分析忽略了
local/dev
是远程分支这一事实。起初我没有注意到这一点。
为远程
本地
命名有什么意义?这是误导

因为
local/dev
不是本地分支,
git-switch-local/dev
使repo处于一种状态。重基的其余部分如文档中所述进行,但最终会有一个新的历史记录行,并且没有指向它的分支(除了
HEAD
)。如果切换分支,则重设基础的结果将丢失

有两种方法可以解决问题:

  • 在当前提交上移动分支
    dev
    。有几种方法可以做到这一点,但最简单的方法是使用
    git branch-f dev

  • 放弃更改,切换到
    dev
    分支,并正确地重新设置基础:

    git switch dev
    git rebase local/dev
    
真正的解决办法 总而言之,整个情况之所以出现,是因为您在命令行中以错误的顺序放置了分支。应该是:

git rebase local/dev dev

这将签出
dev
分支,然后在
local/dev
的顶部移动可从
dev
访问和不可从
local/dev
访问的提交,同时在移动的提交的顶部保留
dev
分支。快速一看,分支
dev
似乎是从分支
local/dev
的分叉处切下的,然后将该片段嫁接到
local/dev

的顶部。如果要移动
dev
以获得应用于
local/dev
的修订,可以执行以下操作:

git checkout dev
git cherry-pick $( git merge-base HEAD local/dev )..local/dev

这应该可以

“重置为上游”并不意味着“签出上游”。要重定基址的分支指向上游分支指向的同一个提交。您只会影响正在重定基址的分支,而不会影响正在重定基址的分支。@LasseV.Karlsen:1。好的,它不会签出到
dev
。因此,目前没有分支。man说:
然后重新应用到当前分支时是什么意思?2. 
您只会影响正在重定基址的分支
。我在上游的
local/dev
上重新设置提交的基址。重定基址后的分支
local/dev
保持不变。你说它会受到影响是什么意思?谢谢。我不想更改
local/dev
。我说的是
dev
更是如此。。。您没有要求重新设置
dev
,您在那里运行的是要求在
dev
之上重新设置
local/dev
。如果要在操作完成后将dev设置在当前位置,则需要运行
git branch-f dev
。然后你可以考虑检查一下,Voteup,但被接受了
git checkout dev
git cherry-pick $( git merge-base HEAD local/dev )..local/dev