在单独的git分支中处理两个不相关的文件

时间:2012-09-16 11:48:48

标签: git version-control

我最近开始研究一个使用Git进行版本控制的项目。我必须修复两个缺陷Defect1Defect2Defect1Defect2的修正需要分别更改为File1File2。这两个文件彼此无关。

我想在单独的Git分支中处理每个缺陷。我创建了两个分支fix_Defect1fix_Defect2,并希望独立处理它们。修复是复杂的,所以我无法完成一个修复并在切换到另一个之前提交它。我观察到当我从fix_Defect1切换到fix_Defect2时,对File1所做的任何更改也会出现(反之亦然)。有没有办法避免这种情况发生?

从Git的帮助中,我无法弄明白。我还在SO上搜索了git work with multiple branches,并找到了Git and working on multiple branchesUsing git with multiple branches at once,它们与我的问题很接近但有些不同。

我可以在一个单独的目录中克隆每个分支的存储库的多个副本,但似乎我会错过Git分支的全部功能,除了浪费磁盘空间。你能否提出一个处理这种情况的好方法?

1 个答案:

答案 0 :(得分:3)

您的问题源于您正在更改工作目录中的文件(例如file1file2)但未提交或存储这些更改。最好的解决方案是在您想要切换分支时提交更改:

git add file1 file2 ;# add whichever ones you've fixed
git commit ;# commit the work in progress
git checkout fix_Defect2 ;# now checkout the other branch

当然,厨房水槽承诺,那些包括正在进行的工作和可能破损的代码,对你的历史并不是特别好。您可以随时使用git rebase清除历史记录。例如,请参阅this answer了解详细信息,或this answer了解其背后的理念。

最后,如果您不喜欢提交作品的想法,您也可以使用git stash获得类似结果:

git stash ;# when you're ready to switch
git checkout fix_Defect2 ;# work on this branch for a while
git commit -A ;# be sure to commit your work on 'fix_Defect2'
git checkout fix_Defect1 ;# checkout the original branch
git stash pop ;# reapply the work you stashed from the working directory

我一般不建议使用存储解决方案。存储机器不是非常强大,而且更适用于需要修补某些内容的情况,而不是平衡两个同样复杂的功能分支。

有关详细信息,请查看git-scm文档中的“文件状态生命周期”图表。