git 拉取并丢失任何本地更改

git pull and lose any local changes

我有一个 CI 系统,它从 Github 中提取代码进行测试。它从 repo 的克隆开始,然后,当出现新提交时,它会获得提交的哈希值并执行:

git pull --no-rebase origin <hash>

git -c advice.detachedHead=false checkout --no-progress <hash>

没有对代码进行任何更改,没有推送任何内容,只有拉取。

然而,偶尔 git pull 会因合并冲突而失败:

Pulling is not possible because you have unmerged files. hint: Fix them up in the work tree, and then use 'git add/rm <file>' hint: as appropriate to mark resolution and make a commit. fatal: Exiting because of an unresolved conflict.

发生这种情况时,我尝试将 git reset --hard 作为一种恢复机制并再次执行 pull 但这无济于事,同样的合并冲突阻止了 pull工作,我卡住了。

谁能告诉我我所缺少的 git 魔力,它总能使每个 pull 成功,消除 [不存在的] 本地更改?

如果您只想对上述修订进行测试,为什么要拉入本地分支(并面对尝试合并内容时发生的这种混乱情况)?尝试获取并签出:

git fetch origin
git checkout <hash>

应该可以。不再需要处理冲突或其他问题。如果可能,您甚至应该考虑在此过程中尝试 git clean -f,以便作为(先前)构建过程的一部分生成的文件也会消失。