我在git存储库中有2个分支:common
和myown
。
我想将源从一个分支复制到另一个分支,但我想在历史记录中看到common
分支仅提交与功能迁移相关的提交(从myown
到common
)。
是否可以复制没有历史记录的源或是否需要新的存储库?
此外,可能需要从common
合并到myown
并在一些更改之后将源复制为新提交(并且仅作为该提交 - 没有我之前所说的所有其他提交的历史记录) )。
答案 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> .