Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git存储库中获取特定文件的更改历史记录_Git_Diff_History - Fatal编程技术网

如何在git存储库中获取特定文件的更改历史记录

如何在git存储库中获取特定文件的更改历史记录,git,diff,history,Git,Diff,History,我想做一些类似的事情: git history my_file 可能输出 尝试: 最接近您想要的是: -p:如:生成补丁中所述 -U0:使用0行上下文而不是通常的三行上下文生成差异 --pretty=格式:%ai:在补丁输出之前加上作者日期ISO 8601格式 例如: /c/Prog/Git/git2/git (master) $ git log -p -U0 --pretty=format:%ai -- wt-status.c 2010-03-24 16:25:43 -0700 2010

我想做一些类似的事情:

git history my_file
可能输出 尝试:


最接近您想要的是:

  • -p
    :如:生成补丁中所述
  • -U0
    :使用0行上下文而不是通常的三行上下文生成差异
  • --pretty=格式:%ai
    :在补丁输出之前加上作者日期ISO 8601格式
例如:

/c/Prog/Git/git2/git (master)
$ git log -p -U0 --pretty=format:%ai -- wt-status.c
2010-03-24 16:25:43 -0700
2010-03-13 23:00:27 +0100
diff --git a/wt-status.c b/wt-status.c
index e0e915e..5848f1c 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -306,0 +307,2 @@ static void wt_status_collect_changes_worktree(struct wt_status *s)
+       if (!s->show_untracked_files)
+               DIFF_OPT_SET(&rev.diffopt, IGNORE_UNTRACKED_IN_SUBMODULES);

2010-03-08 22:58:09 -0800
diff --git a/wt-status.c b/wt-status.c
index 5807fc3..dcaec7f 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -292,0 +293 @@ static void wt_status_collect_changes_index(struct wt_status *s)
+       struct setup_revision_opt opt;
@@ -295,2 +296,4 @@ static void wt_status_collect_changes_index(struct wt_status *s)
-       setup_revisions(0, NULL, &rev,
-               s->is_initial ? EMPTY_TREE_SHA1_HEX : s->reference);
+       memset(&opt, 0, sizeof(opt));
+       opt.def = s->is_initial ? EMPTY_TREE_SHA1_HEX : s->reference;
+       setup_revisions(0, NULL, &rev, &opt);
+

如果您将文件传递给Git安装附带的gitk,还将提供一个文件历史的良好UI视图

在Windows上

gitk.cmd <file>
gitk.cmd

感谢您提供的额外参数:)它只是osx上的gitk path/to/file。我也认为linux上也是如此。我必须升级git才能获得gitk命令。
git log -p -U0 --pretty=format:%ai -- filename
/c/Prog/Git/git2/git (master)
$ git log -p -U0 --pretty=format:%ai -- wt-status.c
2010-03-24 16:25:43 -0700
2010-03-13 23:00:27 +0100
diff --git a/wt-status.c b/wt-status.c
index e0e915e..5848f1c 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -306,0 +307,2 @@ static void wt_status_collect_changes_worktree(struct wt_status *s)
+       if (!s->show_untracked_files)
+               DIFF_OPT_SET(&rev.diffopt, IGNORE_UNTRACKED_IN_SUBMODULES);

2010-03-08 22:58:09 -0800
diff --git a/wt-status.c b/wt-status.c
index 5807fc3..dcaec7f 100644
--- a/wt-status.c
+++ b/wt-status.c
@@ -292,0 +293 @@ static void wt_status_collect_changes_index(struct wt_status *s)
+       struct setup_revision_opt opt;
@@ -295,2 +296,4 @@ static void wt_status_collect_changes_index(struct wt_status *s)
-       setup_revisions(0, NULL, &rev,
-               s->is_initial ? EMPTY_TREE_SHA1_HEX : s->reference);
+       memset(&opt, 0, sizeof(opt));
+       opt.def = s->is_initial ? EMPTY_TREE_SHA1_HEX : s->reference;
+       setup_revisions(0, NULL, &rev, &opt);
+
gitk.cmd <file>