Git:将源代码复制到没有历史记录的新分支

时间:2013-12-26 19:17:31

标签: git branch

我在git存储库中有2个分支:commonmyown

我想将源从一个分支复制到另一个分支,但我想在历史记录中看到common分支仅提交与功能迁移相关的提交(从myowncommon)。

是否可以复制没有历史记录的源或是否需要新的存储库?

此外,可能需要从common合并到myown并在一些更改之后将源复制为新提交(并且仅作为该提交 - 没有我之前所说的所有其他提交的历史记录) )。

3 个答案:

答案 0 :(得分:9)

我找到了一种可以使用的更快的方式:

git checkout <branch> -- .

这将用<branch>的内容替换当前已检查分支的内容。

这不会复制<branch>提交历史记录。

如果您只想结帐一些文件,只需将.替换为<branch>的文件路径。

编辑:我发现这只会替换当前文件,并且不会删除<branch>上没有的文件。

最好在结账前运行rm -rf

答案 1 :(得分:5)

看来我已经想出了怎么做。例如,我们有分支myown。 我们需要创建一个空的(没有历史记录):

  

git checkout --orphan common

现在我们需要添加文件:

  

git add。

并全部提交:

  

git commit -m“Initial”

您只能在日志中看到此提交(不是所有在myown分支中创建的)。 现在我们可以结帐myown分支并继续工作:

  

git checkout myown

我们可以在自己的分支中进行多次提交(类似于常规工作):

  

...

     

git commit -m“feature1”

     

...

     

git commit -m“feature2”

现在我们已经提交了两个,而log包含两者。我们需要将其复制到common分支并将其命名为“release1”

  

git checkout common

     

git merge --squash myown

     

git commit -m“release1”

这就是我的第一部分问题。 此外,很容易提交到common存储库(例如,与release1本身相关的小更改/修复)。您可以定期合并以将代码放回myown分支。

答案 2 :(得分:0)

清理文件夹,但保留隐藏的文件/文件夹:

mkdir ../delete
mv * ../delete
rm -rf ../delete

分支复制源代码:

git checkout <branch> .