合并时排除对分支的某些更改(添加和删除),但在其分支中继续跟踪它们



我是git的新用户,但我以前使用过tHg,并且我熟悉分支和合并的基本内容。(例如,直到使用差异工具并解决与之冲突)我正在使用TortoiseGit为我做我的工作,所以我可以有Windows资源管理器/shell集成。我缺乏使用 tGit/git 进行合并的知识。(或者更好地说:我以前从未尝试过用任何SCM做这样的事情)

我已经从现有代码库启动了一个存储库。使用我的新 git 存储库,我已经分支了一个开发和一个测试分支。我开始我的存储库的旧代码库已经包含了一些测试。

现在我想对这些测试进行版本控制,以便在测试被证明是错误的或其他内容时,我可以回滚测试分支中的内容。我认为忽略它们不会是解决方案,除非有一种方法可以在测试分支中仍然对它们进行版本控制。我想从开发分支中删除我的测试,所以我在开发分支中有一个(更)干净的项目文件结构,但将它们保留在测试分支中。因此,如果我删除测试,当我更新要测试的代码时,删除应该从开发分支传播到测试分支,对吗?这就是我不想发生的事情。有没有办法不传播删除?

那么,是否可以仅将一组选定的文件更改从开发推送回测试,反之亦然?如果是这样,我该怎么做?

当然:在测试分支上对删除所有测试的开发分支提交进行-s ours合并。 但在我看来,您希望将测试与源代码完全分开进行版本控制。你可以去它的所有子模块-y,但对于这样的事情,只需将它们保存在完全独立的分支中,从中合并到"测试"分支中:

T---o---o-------o        tests (contains tests/*)
                
          1---2---3      testing
         /   /   /
D---o---o---o---o        dev   (contains all but tests/*)

要启动测试分支,

git checkout --orphan tests
ls|grep -v tests|xargs git rm -r
git commit -m"just the tests"

要进行测试,它是

git checkout testing  (#git checkout -B testing the first time)
git merge dev tests
# test test fix fix commit commit

然后,如果测试确实产生了修复修复提交部分,则有选择地合并回来:

# selective merges from testing
git checkout tests
git merge -s ours --no-commit testing
git checkout --theirs tests    # or however else you want to select fixes
git commit
git checkout dev
git merge -s ours --no-commit testing
git checkout --theirs path/to/fixed/this and/so/on   # likewise
# or git checkout --theirs .; git rm -rf tests
git commit

或者,您可以执行两步合并:

# selective merges from testing
git checkout -B from-testing testing
# rm everything but tests/*
git add -A; git commit
git checkout tests
git merge from-testing
git checkout -B from-testing testing
# rm tests/*
git add -A; git commit
git checkout dev
git merge from-testing

随着您对此类内容越来越熟悉,您将能够通过重置而不是结帐来避免不必要的工作树操作,这是一个值得的大型项目学习。

最新更新