Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.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 - Fatal编程技术网

Git Rebase:上次提交前合并分支

Git Rebase:上次提交前合并分支,git,Git,我有以下情况: 分支功能 A - X (HEAD) 分支主控(分支创建后有一些新东西) 如果我进行git合并(在分支功能之上),我有: 无论如何,有没有做一些重基来得到A-B-C-X?如果我还没有进行提交,那么主分支中的更改可以快速向前推进,因此我希望在该分支上有一个更全面的git日志 真正的用例(也许我做得不好)是:我创建了一个分支,用于从主分支开发新特性。在做了一些提交之后,有人告诉我主分支有一个已经修复的bug,所以我也必须从主分支那里得到更改。Git merge可以很好地工作,但是如果

我有以下情况:

分支功能

A - X (HEAD)
分支主控(分支创建后有一些新东西)

如果我进行git合并(在分支功能之上),我有:

无论如何,有没有做一些重基来得到A-B-C-X?如果我还没有进行提交,那么主分支中的更改可以快速向前推进,因此我希望在该分支上有一个更全面的git日志


真正的用例(也许我做得不好)是:我创建了一个分支,用于从主分支开发新特性。在做了一些提交之后,有人告诉我主分支有一个已经修复的bug,所以我也必须从主分支那里得到更改。Git merge可以很好地工作,但是如果我稍后做Git日志,我会在我的提交之上看到大量不相关的提交,显示我在分支中所做的更改会有点混乱。

正如我的同事所说,
Git rebase master
正是这样做的。git的书解释得很好(不知怎么的,我错过了它,嗯!):

git-rebase[…]的工作原理是指向两个分支(一个分支)的共同祖先 你上了,你正在重新调整的那一个),得到了差异 由您所在分支的每个提交引入,保存这些差异 要创建临时文件,请将当前分支重置为与提交相同的状态 正在重定基址的分支,并最终应用其中的每个更改 转向


如果我理解正确,您回购的原始状态如下:

  B - C [master]
 / 
A - - - X [feature]
现在,如果您(将
功能
合并到
主控
),您将得到的不是

正如你在问题中所写,但是

  B - C - D [HEAD,master]
 /       /
A - - - X [feature]
相反,您应该执行以下操作

git checkout feature
git rebase master
你最终会得到

A - B - C [master]
         \
          X' [HEAD,feature]
根据需要
:)

关于git rebase的推荐阅读:


这听起来像是git rebase master的教科书案例。我遗漏了什么吗?我觉得很有趣的是,你问“有没有任何形式的再基来获得A-B-C-X?”而事实上,这正是再基所做的
git rebase
在另一次提交的基础上重放分支提交,在您的情况下,它可能会将X移到C上。似乎您还没有掌握基本的git概念,我建议您重新阅读关于分支/合并/重定基址的章节,无论您使用什么书/文档来学习git。我不得不告诉您,但是你需要做的就是
git-rebase-master
。哈哈,对不起,伙计们,我现在觉得自己很笨(我阅读了所有关于git rebase的部分,但错过了一些非常严重的内容。在阅读了git rebase的手册页后,我现在就得到了它。@@
  B - C - D [HEAD,master]
 /       /
A - - - X [feature]
git checkout feature
git rebase master
A - B - C [master]
         \
          X' [HEAD,feature]