Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 merge是否将提交重新应用于另一个提交?_Git_Merge_Version Control - Fatal编程技术网

git merge是否将提交重新应用于另一个提交?

git merge是否将提交重新应用于另一个提交?,git,merge,version-control,Git,Merge,Version Control,我15岁,刚刚开始使用源代码管理系统更好地管理我的代码,所以我对这方面有点陌生。现在我有了这个存储库: [a]---[b]---[d]---[f] master \ \ [c]---[e] develop 我想在这里结束: [a]---[b]---[d]---[f]---[g] master \ / \ / [c]---[e]--

我15岁,刚刚开始使用源代码管理系统更好地管理我的代码,所以我对这方面有点陌生。现在我有了这个存储库:

[a]---[b]---[d]---[f] master
        \
         \
          [c]---[e]   develop
我想在这里结束:

[a]---[b]---[d]---[f]---[g]  master
        \               /
         \             /
          [c]---[e]---/      develop

其中
g
相当于在
[f]
上执行提交
[c]
[e]
。这是
git签出主机;git合并开发
,对吗?

您想要的是
git签出主机;git合并开发

这是因为
git merge
采用要合并到当前签出分支中的分支的名称。因此,您可以签出所需的目标分支(主分支),然后将另一个分支合并到其中(开发)


如果您查看上的第一个“描述”部分,您将看到一个与您的描述几乎相同的图表(尽管垂直翻转)。

进入“主”分支的是
git checkout master
,然后
git merge-develope
将“develope”分支合并到当前的“master”分支。

关于合并的另一个重要帮助是和。

您绘制的图片看起来像是
git-merge
的结果,但您对希望发生的事情的描述听起来像
git-rebase

如果你在
mywork
分支上,并说

$ git merge origin $git合并原点 你会得到

将合并想象为将两个不同的快照塞进一起:在本例中,C4和C6一起构成C7

Rebase创建了一个看起来像C7的树,但是它的历史看起来完全不同。比如说,不是合并,而是您发出了命令

$ git rebase origin $git重新设置基准原点 你会得到

当你发现自己希望“我真的希望我在C4而不是C2创建了
mywork
分支,
git-rebase
是将授予它的吉尼


你也可以把rebase看作是从你的历史中删去一个分支,然后把它移植到另一个地方。不要错过从C5和C6到C5'和C6'的细微变化。虽然这些树看起来是一样的,但它们会有不同的父母,从而改变它们的git身份。

15岁使用git的孩子,太棒了+1假设没有两个提交涉及同一个文件。无论是合并还是重定基址,最终都会得到相同的结果,对吗?@wxyz是的,生成的树将是相同的,但它们的历史记录将不同,如上图所示。使用
git-rebase
可以帮助保持历史记录的线性。