git - 为什么提交引入的更改没有显示在我的工作树中?

标签 git

我遇到一个问题,git 说提交已 merge ,但是 提交的更改不在我的工作树中。让事情变得更奇怪的是, git log --name-status 362dde7 告诉我提交修改了一个文件,但是 git log -- path/to/modified/file.java 不显示提交。例如:

确保有问题的提交同时存在于开发分支和功能分支上。

$ git branch --contains 362dde74f142831c99820b999558a2e8f49f66e8
* dev
  feature

列出提交修改的文件。

$ git show --name-status 362dde74f142831c99820b999558a2e8f49f66e8
# commit summary... #
M       path/to/modified/file.java

现在,当我执行相反操作(列出已修改文件的提交)时,未列出提交。

$ git log path/to/modified/file.java
# Commit 362dde7 isn't listed here

如果我切换到功能分支并执行相同的步骤,一切都会按预期进行。

$ git checkout feature
$ git show --name-status 362dde74f142831c99820b999558a2e8f49f66e8
# commit summary... #
M       path/to/modified/file.java
$ git log path/to/modified/file.java
362dde7 Commit summary

基本上,devfeature 上都存在相同的提交,但工作树更改仅在我 check out feature 时显示.有谁知道为什么会这样?

最佳答案

--full-history 再试一次。当 git log 正在寻找修改路径的提交时,默认情况下它会执行 history simplification ,也就是说它没有显示任何提交,从这些提交中可以很容易地看出所有更改已被删除或已经 merge (因此后者出现在 git 无论如何都会列出的其他提交中)。

考虑这张图,其中提交由“路径”的内容标识:

 o---o---A---A---B  master HEAD
  \         /
   o---X---Y        topic

想法是,git 假设当前 checkout 中的某些内容提示您追查 checkout 文件中的更改源 — 如果在 merge 点, merge 结果中没有显示来自一个父项的更改,则没有任何更改该 parent 的历史影响了您的文件副本。

考虑 cherry-picks 和 squash merge 和拒绝更改以及广泛传播的修补程序和多个 pull 源。

关于git - 为什么提交引入的更改没有显示在我的工作树中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19234836/

相关文章:

git - 如何正确地宣布/执行 GitHub 存储库的更新

iphone - 对于源代码控制,我有哪些替代方案,GIT 会这样做吗?

git - 使用 Git Bash 推送有效,但使用 Git Gui 失败

ruby-on-rails - 将临时更改推送到 heroku,然后删除它们(从 gi​​t)

git push origin [local-branch] 尝试推送到远程主分支而不是创建一个新分支

git - 导入错误:没有名为 sslscan 的模块

git - 如何管理 git 存储库中的 IDE 文件?

node.js - "Database"文件在 Heroku 中被覆盖

git - 可以安装 EGit : Missing requirement: Git Team Provider Core

GIT 推送,HTTP 代码 = 502 错误