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