我一直在研究功能分支,对UI文件和逻辑/数据文件进行了更改,并将它们添加到各种提交中-通常在每次提交中对许多文件进行了更改。
我已经决定要创建一个仅包含逻辑更改的分支,因此我可以将该分支合并到母版中,以便其他团队成员可以使用它,而我自己也可以处理UI。
我基本上想从master创建一个新分支,然后在我的功能分支中添加来自选择文件的更改(不是选择提交,而是选择文件)。这可以做吗?
为了更加清晰:
我的功能分支看起来像这样-
提交1:
提交2:
提交3
最后我要创建一个具有-
的新功能分支提交1:
答案 0 :(得分:2)
我会这样:
git checkout -b feature_logic feature
master
分支在您开发功能git reset --soft origin/master
时没有移动。或者,如果真的只是三个提交:git reset --soft HEAD^^^
feature_logic
分支的一部分的文件:git reset HEAD -- <files>
和git checkout -- <files>
git status
以确保已暂存正确的文件。git commit -m"Logic branch"
对gui分支重复上述步骤。
创建两个新分支后,您应该能够将它们合并,并运行git diff HEAD..feature
以使自己感觉很好,因为历史记录重写没有丢失任何内容。
答案 1 :(得分:1)
简单,您可以执行git reset HEAD~3
,这将重置所有提交。
现在,您可以隔离与逻辑和UI相关的所有文件。
在不同的分支中分别对两者进行提交。
答案 2 :(得分:1)
准确给出您想要的内容(创建一个单个提交,其中包含对 some 个文件的所有更改)
master
:git branch <feature/new> master
git checkout <feature/new>
git checkout <feature/old> -- <files to checkout>
。我觉得这是git checkout
鲜为人知的用途之一。它仅将需要的文件拉到当前分支,而无需更改分支。
(Git documentation on this usage of checkout)
奖励要点::如果由于某种原因文件具有您既需要又不需要的更改,则可以使用更加晦涩的--patch
选项({{1} }。此选项调用交互式选择器,该选择器允许您选择要包含的特定块。交互式模式可以使您有所使用,但是在需要分开时很有用。它也存在于添加和重置命令中。
(Git's documentation on Interactive mode)