1

我有一个有助于测试我的程序的提交(即阻止应用程序处于最顶层)。现在,当我需要测试某些东西时,我希望能够在我目前所在的任何地方应用此提交。

我试图通过创建一个testing分支并在需要时将其重新定位到我当前的 HEAD 来实现这一点。但这总是会导致问题,而且似乎不是这样做的方法。

4

2 回答 2

2

我用补丁管理了一些类似的东西(添加一些新的调试类到单独的文件,改变一些拦截器来记录东西/增加日志级别等)。

看看git-format-patchgit-applygit-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
于 2013-09-27T21:26:06.223 回答
0

我玩过一点,git cherry-pick似乎可以用它来做到这一点。

如果测试所需的更改都包含在一个提交中,您可以在该提交处创建一个分支或标签。让我们命名它testing

git cherry-pick -n testing

将此提交应用于您当前的工作目录和您的索引。如果它也不能应用于索引,那就太好了,但我还没有看到这样做的方法。

所以在测试之后你必须做

git reset --hard

回到测试前的位置。

如果用于测试的更改分散在超过 1 个提交中,但所有这些提交都在一个名为 的单独分支中testing,那么我们需要知道testing提交开始的点。这通常是 master,但如果不是,您可以在该提交处创建一个标签并将其命名为testingStart. 在这种情况下,请在以下命令中替换mastertestingStart

git cherry-pick -n testing ^master

这会选择测试分支中的所有提交,但不会选择主分支中的提交。因此,主分支的 HEAD 没有必要指向测试分支的起点。它只需要在其历史中包含该起点。

测试后做

git reset --hard

如上。

如果您忘记了-n上面的其中一个樱桃挑选命令,您可以使用

git branch -f <commit>

将您应用测试提交的分支移回之前的状态。只要确保选择正确的提交。

于 2013-09-27T23:16:33.413 回答