我是git的新用户,但我之前使用过tHg,而且我熟悉分支和合并的基本内容。 (比如,使用diff工具并解决与它的冲突) 我正在使用tortoiseGit为我做我的工作,所以我可以有windows explorer / shell集成。我缺乏使用tGit / git进行合并的知识。 (或者更好地说:我之前从未尝试过任何类似的事情)
我已从现有代码库启动了一个存储库。有了我的新git repo,我已经分支了一个dev和一个测试分支。旧的代码库我开始使用已经包含一些测试的回购。
现在我想对这些测试进行版本控制,这样如果测试证明是错误的,我可以回滚测试分支中的东西。我认为忽略它们不会是解决方案,除非有一种方法可以在测试分支中对它们进行版本控制。我想从dev分支中删除我的测试,所以我在dev分支中有一个(更多)更清晰的项目文件结构,但是将它们保存在测试分支中。因此,如果我删除测试,当我更新代码进行测试时,删除应该从dev分支传播到测试分支,对吧?这就是我不想发生的事情。有没有办法不传播删除?
那么,是否有可能只将一组选定的文件更改从dev推送回测试,反之亦然?如果是这样,我该怎么做?
答案 0 :(得分:1)
当然:在测试分支上执行dev-branch commit的-s ours
合并,删除所有测试。但在我看来,您希望完全独立于源代码进行测试。你可以在它上面使用所有子模块,但对于类似这样的东西,只需将它们保存在完全独立的分支中,然后将它们合并到“测试”分支上:
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
随着你越来越熟悉这种东西,你将能够避免在重大项目学习中使用重置而不是检查来进行不必要的工作树操作,这是值得的。