GIT diff给出的反馈与git merge不同

3
当我运行时
git diff FETCH_HEAD

我从远程获取了更新版本后,它列出了许多预期的更改。

但是...

当我运行时

git merge FETCH_HEAD

它告诉我所有内容都是最新的!!

我错在哪里了?


1
你有未暂存的更改吗?使用 git status 进行检查。尝试使用 git diff HEAD FETCH_HEAD 来避免与当前工作树进行比较。 - Sven Marnach
没有任何提交,而且git diff HEAD FETCH_HEAD仍然给了我很多差异。 - Mild Fuzz
1个回答

2

为什么在合并后FETCH_HEADHEAD不同?

合并会创建一个新的提交,其中包含原始HEAD(现在是ORIG_HEAD)和FETCH_HEAD中的所有更改。这意味着如果您的原始HEAD中包含未包含在FETCH_HEAD中的更改,则新的(合并的)HEAD将与FETCH_HEAD不同,因为它还包含了那些提交。

需要检查的事项

由于上述原因或其他原因,您当前的分支可能已经与以前获取的FETCH_HEAD保持最新状态。

要检查这一点,请按以下方式从获取头部获取sha(十六进制数字):

git log -1 FETCH_HEAD
commit bec5aadef68a5d29c9d523358a0189b86cad4c82
Author: Alex Brown <alex@XXX>
Date:   Tue Nov 16 10:05:19 2010 +0000

    weather report

复制FETCH_HEAD的前6位数字:bec5aa

接下来,在您当前版本的祖先中搜索此sha

git log HEAD | grep "commit bec5aa" -A 5

commit bec5aadef68a5d29c9d523358a0189b86cad4c82
Author: Alex Brown <alex@XXX>
Date:   Tue Nov 16 10:05:19 2010 +0000

    weather report

如果这个命令返回的不是空白,那么FETCH_HEAD已经被合并。你看到的任何差异都在当前的HEAD中,它可能是合并后的HEAD(或其后代)。
*以下是演示例子。
cd /tmp
mkdir 1
cd 1
git init
echo "Woo" > a.txt
git add a.txt 
git commit -m "first commit"
cd ..
git clone 1 2
cd 1
echo "Its nice today" >> a.txt
git commit -a -m "weather report"
cd ..
ls
cd 2
ls
echo "Like peas in a pod" > b.txt
git add b.txt 
git commit -m "sayings"
git fetch
git diff FETCH_HEAD
git merge FETCH_HEAD
git diff FETCH_HEAD

那么你的意思是,我的本地 HEAD 实际上领先于我从远程获取的 FETCH_HEAD? - Mild Fuzz
1
要检查您的 FETCH_HEAD 是否已包含在 HEAD 中,可以调用 git log HEAD..FETCH_HEAD。这将显示所有 FETCH_HEAD 中尚未包含在 HEAD 中的提交。如果输出为空,则无需合并。还可以考虑使用像 gitk 这样的图形工具。 - Sven Marnach
@MildFuzz - 这是你所看到的情况的一个可能解释。 - Alex Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接