1

我最近开始研究一个使用 Git 进行版本控制的项目。我必须修复两个缺陷,Defect1并且Defect2. 分别修复Defect1Defect2需要更改。这两个文件彼此无关。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 分支的全部功能。您能否建议一种处理这种情况的好方法?

4

1 回答 1

3

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

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来清理您的历史记录。例如,请参阅此答案以了解详细信息或此答案以了解其背后的哲学。

最后,如果您不喜欢提交工作的想法,您也可以使用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文档中的“文件状态生命周期”图表。

于 2012-09-16T12:17:10.330 回答