Git stash保持索引冲突

时间:2014-09-02 10:07:22

标签: git workflow githooks git-stash

我需要创建预提交挂钩来对项目进行一些'完整性测试'(主要检查部署是否会没有问题)。 因为我只需要测试即将提交的更改,所以我需要在运行测试之前存储非分阶段的更改,并在执行此操作后弹出存储的更改。但是有一个问题,因为在以下情况下存储和索引之间可能存在冲突:

假设我有一个名为testfile的文件,内容如下:

first line
second line
third line

现在我将在第二个和第三个之间添加一行

first line
second line
second and a half line
third line

然后运行git add,这样它就会上演。

现在我将在上一行之后添加下一行,以便文件看起来像那样

first line
second line
second and a half line
second and three quarters line
third line

所以现在第一行和第二行被提交,第二行和第二行被提交,第二行和第四行未被分级,第三行被提交。

让我们直言不讳。现在,当我运行git stash --keep-index,然后执行我的测试并尝试运行git stash pop时,结果如下:

Auto-merging testfile
CONFLICT (content): Merge conflict in testfile

和文件内容如下所示:

first line
second line
second and a half line
<<<<<<< Updated upstream
=======
second and three quarters line
>>>>>>> Stashed changes
third line

我不知道如何在运行测试后重新应用隐藏的更改并避免此类冲突。我很高兴能指出正确的方向。

1 个答案:

答案 0 :(得分:0)

你基本上想要git checkout --theirs然后(对于冲突的文件),如果你想让藏匿版本(--theirs引用它)。

然后git reset HEAD删除索引中的更改(因冲突而添加),最后添加git stash drop

如果git-stash pop有一个选项可以更好地处理这个问题会很好,因为这通常是你想要的。