【问题标题】:Working on two unrelated files in separate git branches在不同的 git 分支中处理两个不相关的文件
【发布时间】:2012-09-16 11:48:47
【问题描述】:

我最近开始研究一个使用 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 分支的全部功能,除了浪费磁盘空间。您能否建议一种处理这种情况的好方法?

【问题讨论】:

    标签: git version-control


    【解决方案1】:

    您的问题源于您正在更改工作目录中的文件(例如 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 文档中的“文件状态生命周期”图表。

    【讨论】:

    • 我试过commit,就像你说的那样,确实有效。也许是因为我在 CVS 方面的经验,我发现在代码还没有准备好时提交很奇怪(即使它是本地提交)。这一点我现在很清楚。感谢您提供这个有用的答案。
    • @ap.乐意效劳。请记住,git 中的原则是相同的:提交应该是精心设计的、智能分块的、有用的有序的。那写的,像rebase 这样的东西让事后重建历史变得很容易愚蠢。一般来说,我编写的任何功能分支都会经过 2-3 次修订,然后才能“正确”,只要它与我的计算机隔离,这根本不是问题。
    猜你喜欢
    • 2011-12-29
    • 2021-03-29
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多