2012-09-16 26 views
1

我最近开始研究一个使用Git进行版本控制的项目。我必须修复两个缺陷,Defect1Defect2。修复程序Defect1Defect2需要分别更改为File1File2。这两个文件彼此不相关。在单独的git分支上处理两个不相关的文件

我想在单独的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分支的全部功能,除了浪费磁盘空间。你能否提出一个处理这种情况的好方法?

回答

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 answerthis 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文档中的“文件状态生命周期”图表。

+0

我试着用'commit'像你说的那样确实有效。也许是因为我对CVS的经验,当代码没有准备好时(即使它是一个本地提交),我觉得很奇怪。这对我来说很清楚。感谢这个有用的答案。 –

+1

@ap。乐于帮助。请记住,git中的原则是一样的:提交应该精心设计,智能地分块,一个有用的命令。那些书面的,像'rebase'这样的东西使得它很容易重建历史后的历史。一般来说,我作者的任何功能分支都要经过2-3次修改,才能“正确地完成”,只要它与我的电脑隔离,这根本就不成问题。 – Christopher

相关问题