有没有一个快速的git命令来查看旧版本的文件?
在git中是否有一个命令(转储到标准输出,或$PAGER
或$EDITOR
)特定版本的特定文件?
你可以使用git show
:
$ git show REVISION:path/to/file
例如,要显示文件src/main.c
的第4次提交,请使用:
$ git show HEAD~4:src/main.c
请注意,path是从存储库的根目录开始的,除非以./或../开头以指示相对path。 有关更多信息,请查看git-show
的手册页。
按date做这件事情是这样的:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
请注意, HEAD@{2013-02-25}
表示“此仓库中使用reflog ”的“ 2013AD-25AD ”,而不是“2013-02-25在此历史logging中的最后一次提交”。
如果你喜欢GUI,你可以使用gitk:
-
开始与gitk:
gitk /path/to/file
-
在屏幕顶部select修订版本,例如按说明或date。 默认情况下,屏幕的下半部分显示该版本的差异(对应于“补丁”单选button)。
-
要查看选定修订的文件
- 点击“树”单选button。 这将显示该修订版本的文件树的根目录。
- 深入到你的文件。
您还可以使用git show
命令指定commit hash
(通常也称为commit ID
)。
简而言之
git show <commitHash>:/path/to/file
一步步
- 用
git log /path/to/file
显示给定文件的所有更改的git log /path/to/file
- 在显示的更改列表中,它显示
commit hash
,如commit 06c98...
(06c98 …是提交散列) - 复制
commit hash
- 运行命令
git show <commitHash>:/path/to/file
使用步骤3的commit hash
和步骤1的path/to/file
。
注意:在指定相对path时添加./
似乎很重要, git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
。
除了Jim Hunziker的回答之外,
您可以从修订版本导出文件,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
希望这可以帮助 :)
git log -p
会显示提交日志,还会显示每个提交(除了合并提交)的差异。 然后你可以按/
,input文件名,然后按enter
。 按n
或p
键进入下一个/上一个发生。 这样你就不会只看到文件的变化,而且还看到提交信息。
您可以使用这样的脚本将文件的所有版本转储到单独的文件中:
例如
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
它会在与原始文件相同的文件夹中生成一堆文件,命名如下,最新的更改后缀为“1”。 请注意,它也会转储以.logmsg
结尾的另一个文件,其中包含提交的日志消息。
path/to/somefile.txt.1.0dea419 path/to/somefile.txt.1.0dea419.logmsg path/to/somefile.txt.2.cdea8s9 path/to/somefile.txt.2.cdea8s9.logmsg path/to/somefile.txt.3.fdsf2d path/to/somefile.txt.3.fdsf2d.logmsg etc...
git_dump_all_versions_of_a_file.sh
ROOT_FOLDER=$(git_root) CURR_DIR=$(pwd) if [ "$ROOT_FOLDER" != "$CURR_DIR" ] then echo "Switch to the root of the repo and try again. Should be in $ROOT_FOLDER" exit fi function choose_col { COL=$1 if [ -z "$2" ] then OPTS= else OPTS="-F\\${2}" fi awk $OPTS -v col="$COL" '{print $col}' } cd $ROOT_FOLDER FILENAME=$* HASHES=$(git_log_short $FILENAME | choose_col 1) INDEX=1 for HASH in $HASHES do INDEX_OUT=$(printf %03d $INDEX) OUT_FILENAME="$FILENAME.$INDEX_OUT.$HASH" OUT_LOG_FILENAME="$FILENAME.$INDEX_OUT.$HASH.logmsg" echo "saving version $INDEX to file $OUT_FILENAME for hash:$HASH" echo "*******************************************************" >> $OUT_LOG_FILENAME git_log_message_for_commit $HASH >> $OUT_LOG_FILENAME echo " $HASH:$FILENAME " >> $OUT_LOG_FILENAME echo "*******************************************************" >> $OUT_LOG_FILENAME git show $HASH:$FILENAME >> $OUT_FILENAME let INDEX=INDEX+1 done