Git 拉取失败,有时会导致引入外部更改,但有时它只是要求先提交更改

Git pull fails and sometimes causes introducing external changes but sometimes it just asks to commit changes firstly

我试图通过避免过多的合并提交来保持 git 历史线性。出于这个原因,当我想首先提交新更改时,我尝试 git pull 然后调用 git commit。 (顺便说一句,我不想​​使用 git rebase 命令)

但是git pull经常因为冲突而失败,我遇到过两种情况:
1) Git 建议在执行 git pull 之前隐藏或提交我的更改 - 在这种情况下,我同意先提交然后调用 git pull.
2) Git 提取外部更改,我的工作树被污染:我的更改与外部更改混合在一起 - 这让我很痛苦

问题是:为什么有时git选择选项#1但有时选择#2?
有没有办法让 git 总是选择案例 #1?

如果重要我用 TortoiseGit。

This post 描述了类似于选项 #2 的情况:

事实是,文件无论如何都会被拉出并最终被标记为本地修改,但事实并非如此。然后我们需要手动还原未被用户修改的文件。

据我了解,都是因为错误fatal: unable to write new index file, git did exit cleanly。如果发生这种情况,git pull 将以选项 #2 结束。否则,选项 #1(如果存在合并冲突)。