如何查看文件的完整变更历史记录以及具体修改内容?
git log -- [filename]
命令可以显示文件的提交历史,但如何查看文件的修改内容呢?
git diff --cached
git diff origin/master
来显示本地分支和主分支之间的完整差异(可以通过 git fetch
从远程更新)。 - hayesgmgit diff --cached path/to/file.xml
。 - Woodchuck未选中“显示整个项目”选项。
选中“所有分支”选项。
git diff -U <filename>
会给你一个统一的差异。
它应该是红色和绿色的。如果不是,请先运行:git config color.ui auto
。
meld
中手动以图形方式查看文件的更改历史记录如果您只想查看哪些提交更改了文件,以便可以对它们执行 git difftool
命令,并使用 meld(如我在这里所解释的) 以图形方式查看更改,请执行以下操作:
git log --follow --oneline -- path/to/file.c
样例运行和输出:
eRCaGuy_hello_world$ git log --follow --oneline -- c/alsa_aplay__play_tone_sound_WIP.c
04b67fb (HEAD -> master) Update c/alsa_aplay__play_tone_sound_WIP.c
301122a wip: alsa_aplay__play_tone_sound.c: finish initial version of program
d4e8092 wip: add c/alsa_aplay__play_tone_sound.c
meld
图形化地查看最新的更改情况,就像这样(从上面的输出中提取提交哈希值)。# just the last change
git difftool 04b67fb~..04b67fb
# and the one before that
git difftool 301122a~..301122a
# ...and before that
git difftool d4e8092~..d4e8092
git difftool 04b67fb~..04b67fb -- path/to/file.c
git log -L 992,+4:path-to-file
992
表示您想要查看修订信息的行号,
+4
表示您想要在指定行992
之后看到多少行。
最后是文件路径,通常以./src/..
开头。我大概和这个问题的提出者一样,正在寻找一个简单的方法,让我可以使用git difftool和vimdiff来查看从特定提交开始对仓库中文件所做的更改。我对找到的答案不太满意,所以我编写了这个git incremental reporter (gitincrep)脚本,并且它对我很有用:
#!/usr/bin/env bash
STARTWITH="${1:-}"
shift 1
DFILES=( "$@" )
RunDiff()
{
GIT1=$1
GIT2=$2
shift 2
if [ "$(git diff $GIT1 $GIT2 "$@")" ]
then
git log ${GIT1}..${GIT2}
git difftool --tool=vimdiff $GIT1 $GIT2 "$@"
fi
}
OLDVERS=""
RUNDIFF=""
for NEWVERS in $(git log --format=format:%h --reverse)
do
if [ "$RUNDIFF" ]
then
RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
elif [ "$OLDVERS" ]
then
if [ "$NEWVERS" = "${STARTWITH:=${NEWVERS}}" ]
then
RUNDIFF=true
RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
fi
fi
OLDVERS=$NEWVERS
done