问题标签 [git-branch-sculpting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1813 浏览

git - 如何将 Git 存储库组合成线性历史?

我有两个 git 存储库R1R2,其中包含来自产品开发的两个时期的提交:1995-1997 和 1999-2013。(我通过将现有的 RCS 和 CVS 存储库转换为 Git 来创建它们。)

如何将两个存储库组合成一个包含项目线性历史准确视图的存储库?

请注意,已添加、删除和重命名了 betweenR1和文件。R2

我尝试创建一个空存储库,然后将它们的内容合并到其中。

但是,这会保留在 revisionD中但不在 revision 中的文件K。我可以制作一个合成提交来删除合并之间的额外文件,但这对我来说似乎不优雅。此外,通过这种方法,最终结果包含实际上并未发生的合并。

0 投票
1 回答
1288 浏览

git - 跨多个分支的 Git 交互式变基

我有一个 git 存储库,其中包含一些我希望删除的敏感内容的源文件(我不想删除该文件,只需修改其内容)。提交是在项目开发的早期(当时我们只有一个分支),但现在在 n 个其他分支中找到了它自己。

是否有任何 git-fu 我可以在所有分支中运行来清理它?交互式变基一次只能工作一个 Head。

我确实在 github 上找到了这个命令:

但它只适用于删除,而不是修改

0 投票
2 回答
3493 浏览

git - 当合并提交妨碍时如何避免变基地狱?

我的 git 树中有以下情况:

我想 rebase 和 squash 功能中的所有内容,以便我可以通过一次提交添加的功能来推进 master。

由于提交 7 已经是解决所有冲突的合并,因此我尝试了以下操作:

这里给我的唯一选项是提交 7、8 和 9。“有道理”,我想,“因为合并已经包含 5 和 6,它们可以被丢弃”。我继续在一次提交中压缩 7、8 和 9,我们称之为“789”。(我知道,我是创意型的。)

在此之后,我的树看起来像这样:

5 和 6 在同一个分支中的存在让我感到困惑,但同样,由于它们已经包含在 7 中(现在在 789 中),我可以丢弃它们。

所以我git rebase -i master又一次,这次我丢弃了 5 和 6。

但是,这里和那里发生了冲突,所以我放弃了整个事情。

我目前处于那个阶段,但我的远程分支尚未更新,所以我不妨重置为原始状态。

哪些是正确的步骤,可以让我到达我想要的位置,而无需手动解决所有合并冲突?

0 投票
3 回答
180 浏览

git - 如何删除主题 Git 分支的所有提交?

假设我有以下历史:

是否可以删除所有主题分支及其提交,如下所示

A-B-C-D-E master

0 投票
1 回答
16956 浏览

git - 删除/隐藏 git 分支而不删除提交历史

情况:

我有一个主仓库,其中有一个主开发分支和许多从中萌芽的“实验”分支(例如,exp1exp2)。这些实验分支的目的是充当生成数值结果的实验​​的占位符。我记录了实验分支的分支名称(和提交 ID),以便我可以返回到提交以准确查看结果背后的代码和历史记录。

但是,现在,有太多的实验分支,以至于很难看到主树。因此,我正在重新考虑将占位符保留在每组结果(即每个实验)背后的代码的策略。显然,我可以只保存每个分支的工作目录,但保留提交历史记录也会很好。

可能的解决方案:

解决此问题的一种方法是将实验分支移动到它们自己的独立存储库中,每个存储库都植根于 dev 分支的提交历史记录中适当节点的子节点。这是我的意思的说明:

在此处输入图像描述

单击此处查看更大版本的图像(在 imgur.com 上)。

因此,例如,对于 branch exp1,我想将提交导出到以 commitA->B->C为根的单独存储库A。然后,我可以只记录提交的哈希值,P1以便我知道exp1分支的起源。

问题:

我怎样才能做到这一点?

更好的问题:

另一方面,我强烈怀疑有一个更好的策略来做我想做的事情——即整理树以进行目视检查,但将占位符保留在先前的分支上,以便我可以在需要时返回它们。那么,任何人都可以为此推荐一个策略吗?

0 投票
1 回答
55 浏览

git - 当使用基于特性分支的 rebase 工作流时,我如何在 master 中保留一个分支以进行细微的更改?

我曾经使用合并工作流程,而我当前的团队使用 rebase 工作流程。

在其中,功能分支是从 master 分支出来的,然后与 master 重新建立基础,然后 squash 合并到 master 上。

我想在 master 上保留一个分支以进行细微的更改,以便我可以轻松地适应功能分支,但是,我不确定什么是可以减少问题的解决方案:

  1. 从主分支 fork minor_changes,然后将其合并到我的功能分支(可能有很多分支),然后将功能分支合并到主分支。
  2. 从 master 中 fork minor_changes,然后使用 minor_changes 重新定义(可能有很多)特性分支,然后将特性分支合并到 master 上。

我不知道第一个选项是否会给我带来任何麻烦,我怀疑第二个选项可能会在最终历史记录中重复提交。

解决这个问题的最佳方法是什么?

0 投票
1 回答
147 浏览

git - 如何在单个 git 存储库上设计和维护多个实时代码流

我有一个有两个实时版本的项目(新版本不向后兼容,因此有两个完全独立的代码流)。问题:我应该如何设计 git(寻找最佳实践):

1)在同一个仓库中为两个版本有两个单独的 Master 和 Develop 分支(不想有单独的仓库)

2)使用git标签(不是有这么多的家庭,不知道这是否适用于Bamboo构建服务器)

3) 其他选项..

该领域的任何帮助都将非常有帮助!

0 投票
4 回答
5072 浏览

git - 推送到在分离的头部上进行的主提交

我想重做以前提交的更改。

所以我在 7f9dd753d39fd65b4272af713ef9c07a9f84f016 上打破了它,并决定从 54561ed320633e72bb35a7ab668a9996e6ffca8f

到目前为止一切顺利,现在让我们进行修复。

但现在我需要把它推回到主人身上,然后上车。混乱的部分来了……

对...所以现在我被卡住了。让我们尝试一些更古怪的东西

git up 不会和我们说话,这很酷。反正我真的不需要。

什么?不!回来提交,我爱你。

丢失的!永远?我希望不是..

好的,所以他们在野外的某个地方,但我如何让他们回来?现在说再见还为时过早。

帮助?

0 投票
1 回答
103 浏览

git - 旧提交的 Git 分支

我已经在 SO 和其他文档上对此进行了研究。我尝试过变基、合并、挑选和分离头。

在尝试了 6 个小时之后,是时候提出这个问题了!

这是我开始的内容:

这是我想将其更改为:

我最接近的是:

我必须添加另一个分支名称和一个虚拟提交才能使分支完全正常工作。

但这比没有变化更糟糕。

请帮忙!

回复后更新

感谢您的回复。

是的,我的“我想要什么”不是很清楚。希望这可以澄清它:

换句话说,F 处的“master”是 B 加上分支“dev”合并到其中的结果。

还是行不通

感谢@frasertweedale 的尝试回答。

我已仔细按照您的指示进行操作,结果如下:

我很高兴这很难:现在花了 7 个小时在这上面,我感觉没有那么糟糕!

最终结果 正如@frasertweedale 所说,这正是我想要的,除了悬空提交。

所以,我只需要摆脱悬垂。

为了清楚起见,我在下面重新绘制了:

这个命令进行清理:

结果:

“merge branch 'dev'” 包含原始的 F 提交,当然,可以这样重新注释。

0 投票
1 回答
35 浏览

git - 如何将错误添加到分支/提交的文件移动到 Git 中的不同分支/提交?

在此处输入图像描述

我在分支中有一个不应该存在的文件 ( driver_06_05_2015.view)ServiceProvisionSpecialist_06_08_2015并且即使它应该在分支中也被错误地提交到该driver_06_05_2015分支。

有没有办法我可以通过重写历史将文件(而不是整个提交)移动到 driver_06_05_2015 分支(我认为当人们说它指的是 rebase 命令时......)