![]() |
1
4
Git的奇特之处在于它的分支 姓名 不要影响你的 提交历史记录 除了他们允许你和其他人,这是非常重要的 发现 提交。秘密在于,在Git中,提交可能是开启的 许多的 分支机构 同时 . 然而,重要的是,一旦做出承诺,就永远无法实现 改变 . 它可能是 已复制 提交(新的,略有不同),但它不能更改。
此外,当任何分支名称
可以
强制指向任何提交,分支名称运动有一个“正常方向”:通常,它们仅
进展
. 正如我们稍后将看到的,前进意味着无论他们过去指向什么提交,都仍然“在”那个分支上。所以,一旦你把你的承诺交给其他人,并要求他们称之为承诺
是的,可能有一个非常简单的方法:“还没有推动任何事情”意味着你是 只有一个 谁有这些承诺,所以无论你如何找到它们,这就是为什么 每个人 找到他们,因为你是“所有人”。-)没有必要让其他人改变任何事情。 只要它们已经按照您想要的方式进行了布局,您就只需要重新安排找到这些提交的方式。 让我们用“Git方式”绘制现有的提交序列:
在Git中,每个提交都由其散列ID唯一标识。这些东西又大又难看,显然是随机的(尽管它们实际上是完全确定的),所以我们很少使用它们,或者使用类似的缩写形式
内部提交
同样地,
这是一种更紧凑的绘制方式。总是,必然,点
向后
,所以我们真的不需要内部箭头,我们知道它们总是倒退。树枝
姓名
然而,就像
Git通过从分支名称指向的分支开始查找提交:
这意味着我们 希望 看起来,可能是这样:
这里是上的提交
另一方面,也许我们想要的图片是这样的:
也就是说,我们需要回答一个问题。名称
如果第一张图片是对的,答案很简单:取一个新名字,
然后,根据当前签出的分支,可以:
或:
请注意,在使用之前
但是,如果你想要第二张图片,如果你想要提交的父对象
那个
,您需要使用
给:
然后运行三个
一次复制所有三个。这将产生:
在这一点上,强制是安全的
您也可以通过哈希ID来实现这一点,如前面的示例所示:
我们所做的一切
|
![]() |
2
2
使现代化
-我误读了你的图表,结果把分支名称弄错了。正如torek所指出的,对图表进行“更正确”的阅读还包括一些模糊之处。我将保留我的答案,因为我相信它传达了主要原则;如果你需要进一步编辑,我会尽量使用rebase
首先让我来谈谈我认为你在寻找的解决方案;但我建议阅读更多内容,因为这个问题中存在概念上的困惑,值得澄清。 所以你现在有了
我想你想以
只有
然后移动
(I使用
完成这些步骤后,您就可以
哪一个 看起来像 你所描述的,但我们没有达到描述所暗示的方式。 我没有动;我移动了树枝。这在git中要简单得多,它反映出提交不像在某些系统中那样“属于”git中的分支。因此,语句“在上一次提交时进行分支,但在该分支上包含以下提交”不适用 真正地 在git中有意义。
问题中前后图的模糊性确实留下了一个可能性,即我误解了确切的内容
在这里
(但在这种情况下,尝试删除
rebase命令将打开一个文本编辑器,其中包含一个待办事项列表,每个提交都有一个条目。您可以删除提交条目
无论如何,做你想做的事意味着删除
|
![]() |
3
0
您可以使用:
然后
现在,您有了带有提交A的新分支。然后可以返回到提交D
然后从该分支恢复提交
现在您必须在其中一个上进行分支,在另一个上只有提交一段时间,即提交b、c和d。 |
![]() |
4
-1
最直接的方法是在提交A之前在提交的基础上创建2个新分支。然后cherry pick提交A到1个分支,cherry pick提交B、C、D到第2个分支。 |
![]() |
Hal · Commit语句的用法 6 年前 |
![]() |
Marcus Cemes · 选择。。。用于更新在提交后选择旧数据 7 年前 |
![]() |
Dawid · 红移CTA和自动提交 7 年前 |
![]() |
Jsing · “SVN”是否具有像git那样挤压提交的机制? 7 年前 |
![]() |
four-eyes · 从特定提交开始创建新分支 7 年前 |
![]() |
Young Pattewa · 在Solr上重新加载(谷歌云) 7 年前 |