请注意:
C:\Dayforce\test [master ↓2 +0 ~2 -0 !]> git pull
error: Your local changes to the following files would be overwritten by merge:
2.txt
Please commit your changes or stash them before you merge.
Aborting
Updating 2dc8bd0..ea343f8
C:\Dayforce\test [master ↓2 +0 ~2 -0 !]>
git是否有一个命令可以告诉我哪些未提交的文件导致此错误?我可以看到它们是通过git pull显示的,但是我真的不想解析git pull的输出。
我完全了解pull.rebase
和rebase.autostash
的配置选项,请不要提出它们。
编辑1
可以先执行git pull
。实际上,由于这个原因,在git pull
失败之后将完成识别有问题文件的逻辑。我在Powershell中认识它的方式是:
git pull
# Possible exit codes:
# 1 - either local changes or pull merge conflict (but the merge has not been started yet)
# 128 - a merge is in progress
if ($LASTEXITCODE)
{
git merge HEAD 2> $null # Disambiguate the exit code
if ($LASTEXITCODE -eq 128)
{
# Two options:
# - pull merge conflict
# - a merge is in progress
git mergetool
}
else
{
throw "Cannot pull due to uncommitted changes"
}
}
因此,我不想中止问题,而是要确定有问题的文件并实质上复制rebase.autostash
,但没有rebase
。
编辑2
我曾经认为git pull在发生未提交的更改冲突时会输出如下内容:
C:\xyz\test [master ↓4 ↑1 +0 ~3 -0 !]> git pull
error: Your local changes to the following files would be overwritten by merge:
2.txt
a.txt
Please commit your changes or stash them before you merge.
Aborting
C:\xyz\test [master ↓4 ↑1 +0 ~3 -0 !]>
这很容易解析。但是今天,我得到了一些不同的东西:
C:\xyz\test [master ↓4 ↑1 +0 ~2 -0 | +0 ~1 -0 !]> git pull
error: Your local changes to the following files would be overwritten by merge:
1.txt a.txt
C:\xyz\test [master ↓4 ↑1 +0 ~2 -0 | +0 ~1 -0 !]>
我不知道这与我的Powershell控制台是否以某种方式被破坏有关,还是与最近的git更新(我没有注意到的自动安装)有关。
答案 0 :(得分:2)
我不知道这与我的Powershell控制台是否以某种方式被破坏或最近的git更新有关
Git 2.19最近通过commit 9270239 (Jul. 2018)
更改了合并报告此错误的方式这是基于merge-recursive.c#merge_trees的,它跟踪两棵树以检测公共文件被覆盖。
问题是:
在您的情况下,由于git pull已完成其获取的部分,但未完成其合并部分,因此您可以执行git diff -–name-only HEAD origin/yourFetchedBranch
以便将工作树与获取的内容进行比较。
那应该列出不同的文件,包括您的2.txt
。
会不会给我所有将要更改的文件,而不仅仅是冲突的文件?
是的,
对于每个文件,您仍然需要检查该文件是否属于当前已修改(未暂存或暂存但未提交)文件列表的一部分:
git ls-files --other --modified --exclude-standard
git diff --name-only --cached