为什么git中的提交会更新文件,但不会显示这些文件?
我们遇到过这样一种情况:开发人员进行了一次提交,更改了两个文件(如提交中所示),但实际上更改了更多的文件。也就是说,我们可以查看上一次提交中的一个文件,查看一些内容,然后查看违规提交中的同一个文件,该文件不同(缺少内容),但是该文件在违规提交中没有显示为已更改。这怎么可能 我们假设违规提交的开发人员在推送之前没有拉,并推送了一个旧版本,但我希望看到所有意外更改的文件以及所需的更改。由于我没有看到这些变化,我想知道是否发生了其他事情 下面是我们看到的(仅针对一个有更改但未提交的文件)为什么git中的提交会更新文件,但不会显示这些文件?,git,github,Git,Github,我们遇到过这样一种情况:开发人员进行了一次提交,更改了两个文件(如提交中所示),但实际上更改了更多的文件。也就是说,我们可以查看上一次提交中的一个文件,查看一些内容,然后查看违规提交中的同一个文件,该文件不同(缺少内容),但是该文件在违规提交中没有显示为已更改。这怎么可能 我们假设违规提交的开发人员在推送之前没有拉,并推送了一个旧版本,但我希望看到所有意外更改的文件以及所需的更改。由于我没有看到这些变化,我想知道是否发生了其他事情 下面是我们看到的(仅针对一个有更改但未提交的文件) 提交x(冒
- 提交x(冒犯)
- 提交中更改了2个文件
- 文件Y没有行Z
- 文件Y在提交中不显示为已更改的文件
- 提交y(上一个)
- 文件Y有行Z
- 文件Y在许多次提交之前更改
- 提交A(5天,可在y之前提交)
- 文件Y添加行Z
- 文件Y已提交
-f
开关
我还发现了一个后来的提交,它确实显示了对文件的更改。我敢肯定,另一个开发人员从现在的fubared分支进行了合并,然后更新了提交中的所有文件。他们显然没有查看他们提交的文件,注意到不是3个文件发生了变化,而是有60多个文件。现在事情已经解决了。由于您没有指定导致得出结论的确切命令和输出,因此不可能得出许多明确的结论。但是,我可以保证两件事: 1) 正常尝试在不拉动的情况下推动不会删除已推动的更改;它将生成一个错误。在分布式开发中,这种情况经常发生,因此如果它导致更改被擦除,那么git首先就不是一个可行的版本控制系统。(不过,处理该错误的错误程序可能与您看到的大致相同;我将回到这一点。) 2) 提交A与其父提交p的不同之处在于,没有一个过程不会在A的修补程序中显示为更改。这是因为提交总是存储为项目的快照,而更改(“补丁”)是通过检查提交及其父项来计算的,因此从几乎数学的角度来看,声称这种情况是没有意义的 因此,假设您所说的一切都是准确的,并且只改变您暗示/显然假设的内容,最合理的解释是
y
不是x
的父提交
一种可能发生的情况是,如果制作x
的开发人员在一个单独的分支上(可能是在a
之前创建的分支):
这将执行“强制推送”,可以从分支的历史记录中删除提交。它不应该是任何人日常工作流程的一部分,而且通常是服务器配置所禁止的。结果将出现在服务器上
o -- A -- o ... o -- y
\
x <--(master)
其中是的提交ID或解析为提交y
的其他表达式。(如果要检查commity
,则必须使用这样一个表达式来查找它。)
然后你会回到我身边
o -- A -- o ... o -- y <--(master)
\
x <--(branch)
o--A--o。。。o--y那么,您是说命令:git diff^代码>不向控制台打印任何内容?在git中,您不能先推后拉。您是否正在GitHub上查看提交更改?还是在你的终端上?
o -- A -- o ... o -- y
\
x <--(master)
git checkout master
git reset --hard *<ID-of-commit-y>*
git push -f
o -- A -- o ... o -- y <--(master)
\
x <--(branch)