Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 Merge_Git Rebase - Fatal编程技术网

Git 如何修理一个本应在主人前面但却在主人后面的树枝?

Git 如何修理一个本应在主人前面但却在主人后面的树枝?,git,git-merge,git-rebase,Git,Git Merge,Git Rebase,我有一个功能分支,它的所有提交都应该在master之前,但是当我尝试将master合并到我的功能分支时,如下所示: (功能)$git合并主机 我在功能分支中的所有更改都将被删除。我还尝试使用重设基址,但我一直得到相同的结果 (feature)$ git rebase master First, rewinding head to replay your work on top of it... Fast-forwarded feature to master. (feature)$ git ch

我有一个功能分支,它的所有提交都应该在master之前,但是当我尝试将master合并到我的功能分支时,如下所示:

(功能)$git合并主机

我在功能分支中的所有更改都将被删除。我还尝试使用重设基址,但我一直得到相同的结果

(feature)$ git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded feature to master.
(feature)$ git checkout master
(master)$ git merge feature
Already up-to-date.
我只做了
git合并功能
来测试重基是否工作,但它没有,因为它已经是最新的了。

就好像在某个时候,我的功能分支落后于主功能,我不知道这是怎么发生的,也不知道是什么时候发生的。可能是功能分支被合并到分支,然后通过新的提交被删除,但是当我完成功能分支时,我希望在将来的某个时候,当我想要部署它时,将其添加到

我的问题是,如何将对功能的所有提交移到主分支之前的分支

或者,在执行g
it merge master
之后,我是否可以重新提交当前在feature分支中的所有更改

C1(专题组) 。。。可能是
功能
分支被合并到
分支,然后通过新提交被删除

很可能是这样。但请注意以下几点:

  • 所有提交都只是某个源树的快照,加上一些元数据:具体地说,是谁进行了此提交以及何时(分为两部分,“作者”-编写者和“提交者”,将其添加到存储库的人),加上提交消息,加上父提交的哈希ID,或者对于合并提交,两个或多个父提交
  • 新提交不会删除任何内容。它只是添加了一个提交
  • 要查看任何两个提交之间的区别,您(或Git)提取每个提交,然后比较两个快照
当你说用一个新的提交删除时,你的意思是:有人编写了一个提交,它通过合并
功能
分支来撤销所有引入的更改

但是,当我完成
功能
分支后,我希望在将来的某个时候,当我想要部署它时,将其添加到

这才是真正的问题。其他人已经添加了它,然后添加了一个新的commit,上面写着:不,全部撤销。Git现在确定(并且正确)它已经被添加,并且(由于添加了提交)正确的最终状态是“不要使用它”

这对你来说意味着这些承诺对你再也没有好处了。他们已经被添加了,然后一个新的国家被强加给他们,以支持他们所做的事情。您不能再添加它们:它们已经在那里了您需要的是新提交,或者恢复恢复。

给你,你很幸运。请参阅(问题和),然后请参阅,特别注意附录:使用原始(现在已还原)提交使用新提交重新创建主题分支

。。。可能是
功能
分支被合并到
分支,然后通过新提交被删除

很可能是这样。但请注意以下几点:

  • 所有提交都只是某个源树的快照,加上一些元数据:具体地说,是谁进行了此提交以及何时(分为两部分,“作者”-编写者和“提交者”,将其添加到存储库的人),加上提交消息,加上父提交的哈希ID,或者对于合并提交,两个或多个父提交
  • 新提交不会删除任何内容。它只是添加了一个提交
  • 要查看任何两个提交之间的区别,您(或Git)提取每个提交,然后比较两个快照
当你说用一个新的提交删除时,你的意思是:有人编写了一个提交,它通过合并
功能
分支来撤销所有引入的更改

但是,当我完成
功能
分支后,我希望在将来的某个时候,当我想要部署它时,将其添加到

这才是真正的问题。其他人已经添加了它,然后添加了一个新的commit,上面写着:不,全部撤销。Git现在确定(并且正确)它已经被添加,并且(由于添加了提交)正确的最终状态是“不要使用它”

这对你来说意味着这些承诺对你再也没有好处了。他们已经被添加了,然后一个新的国家被强加给他们,以支持他们所做的事情。您不能再添加它们:它们已经在那里了您需要的是新提交,或者恢复恢复。


给你,你很幸运。请参阅(问题和),然后请参阅,特别注意附录:使用原始(现在已还原)提交,使用新提交重新创建主题分支。

我担心您使用的一些非标准术语可能会影响我对该问题的理解。但是,您多次建议将分支“可能已经”合并到master中,然后在master中撤消其更改。可能是这样的:

x -- O -- x -- x -- M -- W -- x <--(master)
      \            /
       A --- B -- C <--(feature)
这会给你

       A' -- B' -- C' <--(feature)
      /
x -- O -- x -- x -- M -- W -- x <--(master)
      \            /
       A --- B -- C
x -- O -- x -- x -- M -- W -- x <--(master)
      \            /           \
       A --- B -- C ----------- M2 -- ~W <--(feature)
但是,您必须与回购协议的所有其他用户协调,以清理其本地副本(请参阅“从上游再基础恢复”下的
git再基础
文档)

如果这种清理/协调是一个问题,那么有一种替代方法:您可以“还原还原”。有点乱,但还是从

x -- O -- x -- x -- M -- W -- x <--(master)
      \            /
       A --- B -- C <--(feature)
现在你有了

x -- O -- x -- x -- M -- W -- x <--(master)
      \            /           \
       A --- B -- C ----------- M2 <--(feature)
(在这里,您将
W
替换为原始还原提交的ID或其他名称)。例如,在上图中,您可以说

git revert master^
因为
master^
解析为comm
git checkout feature
git merge master
x -- O -- x -- x -- M -- W -- x <--(master)
      \            /           \
       A --- B -- C ----------- M2 <--(feature)
git revert W
git revert master^
x -- O -- x -- x -- M -- W -- x <--(master)
      \            /           \
       A --- B -- C ----------- M2 -- ~W <--(feature)
(feature)$ git checkout -b feature-v2
(feature-v2)$ git merge master
(feature-v2)$ git revert d992f10ab1106f774e10766be8735a66aeb9eadc