我有一个有助于测试我的程序的提交(即阻止应用程序处于最顶层)。现在,当我需要测试某些东西时,我希望能够在我目前所在的任何地方应用此提交。
我试图通过创建一个testing
分支并在需要时将其重新定位到我当前的 HEAD 来实现这一点。但这总是会导致问题,而且似乎不是这样做的方法。
我用补丁管理了一些类似的东西(添加一些新的调试类到单独的文件,改变一些拦截器来记录东西/增加日志级别等)。
看看git-format-patch、git-apply和git-am命令。
工作流程是这样的:
生成你的测试补丁(你只需要这样做一次,除非你的分支中的提交破坏了补丁)。
# switch to the testing branch
git checkout testing
# Generate the patch against the desired branch
git format-patch master --stdout > test_helper.patch
当您需要帮助代码时,只需将脚本应用到您的分支上
# check if patch can be applied
git apply --check test_helper.patch
# apply the patch
git apply --v test_helper.patch
调试你的代码。
完成后丢弃未提交的更改
# revert changes to modified files.
git reset --hard
# remove all untracked files and directories.
git clean -fd
我玩过一点,git cherry-pick
似乎可以用它来做到这一点。
如果测试所需的更改都包含在一个提交中,您可以在该提交处创建一个分支或标签。让我们命名它testing
。
git cherry-pick -n testing
将此提交应用于您当前的工作目录和您的索引。如果它也不能应用于索引,那就太好了,但我还没有看到这样做的方法。
所以在测试之后你必须做
git reset --hard
回到测试前的位置。
如果用于测试的更改分散在超过 1 个提交中,但所有这些提交都在一个名为 的单独分支中testing
,那么我们需要知道testing
提交开始的点。这通常是 master,但如果不是,您可以在该提交处创建一个标签并将其命名为testingStart
. 在这种情况下,请在以下命令中替换master
为testingStart
:
git cherry-pick -n testing ^master
这会选择测试分支中的所有提交,但不会选择主分支中的提交。因此,主分支的 HEAD 没有必要指向测试分支的起点。它只需要在其历史中包含该起点。
测试后做
git reset --hard
如上。
如果您忘记了-n
上面的其中一个樱桃挑选命令,您可以使用
git branch -f <commit>
将您应用测试提交的分支移回之前的状态。只要确保选择正确的提交。