0

我正在从我的主分支开始一个新分支。但我不希望新分支上的全部历史。我希望只有 1 个提交来启动分支。

我创建了新分支并尝试重新设置所有提交,但它不起作用,因为我没有以前的提交。我不明白“先前提交”的东西......

也许压缩提交会更好。但是我的新分支在创建时已经与主分支合并。

我不知道该怎么做。你有想法吗?

4

2 回答 2

2

您可以使用一点管道来做到这一点:

tree=$(git log -1 --format=%T master)
commit=$(git commit-tree $tree -m "initial commit")
git checkout -b new_branch $commit

解释:

  1. 仅从当前提交中提取树(数据)master,因为这是您真正感兴趣的内容。树对象的 SHA1 由 打印git log -1 --format=%T,并保存到$tree

  2. 从没有父级的树中创建一个提交。这是通过管道命令完成的,该命令git commit-tree接受一个树对象和一个提交消息,并创建一个提交对象。它通常也需要父提交,但在这种情况下,我们不想要父提交,所以我们不给。该命令输出结果提交的 SHA1,我们将其保存到$commit.

  3. 第三步,也是最简单的一步,是以新的提交为起点创建一个分支,使用通常的git checkout -b.

编辑:执行此操作的更简单的方法是使用git checkout --orphan new_branch master后跟git commit -m "Initial commit",结果完全相同。我将上述解释用于教育目的,因为研究它教会了我一些关于 git 的细节。另外,请注意 git 之所以难以做到这一点是有原因的——强烈鼓励进行历史跟踪——所以如果你这样做,一定要有充分的理由。

于 2012-09-12T17:44:22.583 回答
1

如我所见,您不了解分支是什么。分支只是指向提交的指针。当您从 master 创建一个分支时,您不会创建任何提交,新分支只是指向与 master 完全相同的提交,它们都表示相同。所以,还没有什么可以压缩或变基,也没有历史。

只有在您做了一些更改并将它们提交到分支上之后,您的问题才会有意义:如何将分支中所做的所有更改作为一个提交合并到 master 中?只需使用git merge --squash branch.

于 2012-09-12T17:44:32.100 回答