我正在编写代码来以编程方式运行git命令并同时学习git.我错误地阅读了手册页,还是我想做的不可行?
以下将告诉我两个提交之间MYFILE如何变化:
git diff COMMIT1..COMMIT2 - MYFILE
好.
但是,假设我只想询问COMMITX如何更改文件,而不指定先前的提交.在我的想象中,语法将是这样的:
git diff COMMITX -- MYFILE
Run Code Online (Sandbox Code Playgroud)
或这个:
git diff COMMITX^..COMMITX -- MYFILE
Run Code Online (Sandbox Code Playgroud)
但上述命令不起作用(对我而言).
下面的工作在某种意义上说它给了我统一的差异显示COMMITX如何改变MYFILE,但它还包括我必须删除的其他东西 - 比如作者,日期,签到消息.剥离额外的东西很容易,但感觉这是我不应该做的事情.该命令是否存在?我误解了一些简单的事吗?
Run Code Online (Sandbox Code Playgroud)git show COMMITX -- MYFILE
编辑1:我在这里显示我的"git bash"窗口的实际输出.我将"show"改为"diff",没有输出.
$ git show 789e9 -- dir1/file3.txt
commit 789e948bce733dab9605bf8eb51584e3b9a2eba3
Author: corey
Date: Sun Oct 11 21:54:14 2009 -0500
my msg
diff --git a/dir1/file3.txt b/dir1/file3.txt
index a351259..cf2bd35 100644
--- a/dir1/file3.txt
+++ b/dir1/file3.txt
@@ -4,5 +4,7 @@ c
ddd
e
f
+a new line
+another new line
g
h
Administrator@BIOSTAR /c/temp/mygit (master)
$ git diff 789e9 -- dir1/file3.txt
Administrator@BIOSTAR /c/temp/mygit (master)
git diff COMMIT^..COMMIT file或者git diff COMMIT^..COMMIT -- file两者都适用于git 1.6.3.3.更新由JakubNarębski提供:你也可以写git diff COMMIT^! -- file.
$ git log --oneline b8ad655^!
b8ad655 Bring in the "SimpleMenu" loader plugin
$ git diff b8ad655^! lib/WWW/MenuGrinder/Plugin/SimpleLoader.pm
diff --git a/WWW-MenuGrinder/lib/WWW/MenuGrinder/Plugin/SimpleLoader.pm b/WWW-MenuGrinder/lib/WWW/MenuGrinder/Plugin/SimpleLoader.pm
new file mode 100644
index 0000000..14f6cd8
--- /dev/null
+++ b/WWW-MenuGrinder/lib/WWW/MenuGrinder/Plugin/SimpleLoader.pm
[...]
Run Code Online (Sandbox Code Playgroud)
尝试:
git show --pretty=format: <commitid> -- <file>
Run Code Online (Sandbox Code Playgroud)
以下是它的外观:
diff --git a/config.y b/config.y
index 7750514..f051b99 100644
--- a/config.y
+++ b/config.y
@@ -454,8 +454,8 @@ definegame : TYPE_DEFINE_GAME '{'
}
game_definitions '}'
{
- num_games = ncnf;
ncnf++;
+ num_games = ncnf;
}
;
Run Code Online (Sandbox Code Playgroud)
在开始时仍然只有一个空白行(由于降价限制,此处未显示),但很patch乐意忽略它(实际上,它也会忽略默认git show输出中的标题内容).你也可以通过管道tail -n +2来放弃这条线.
--pretty=oneline 也很有用:
3ed347de4c6e0e3230f651f82aabf964c6d16100 Fix a bug where more than one defined game didn't show up or showed gibberish
diff --git a/config.y b/config.y
index 7750514..f051b99 100644
--- a/config.y
+++ b/config.y
@@ -454,8 +454,8 @@ definegame : TYPE_DEFINE_GAME '{'
}
game_definitions '}'
{
- num_games = ncnf;
ncnf++;
+ num_games = ncnf;
}
;
Run Code Online (Sandbox Code Playgroud)
也就是说,如果你要在某个地方格式化提交补丁,请不要删除那些东西.事实上,使用git format-patch并陶醉其中.第三方修补工具将很乐意忽略这些额外的元数据,对于使用git的项目,git apply将使用您提供的提交消息和作者行,使他们可以轻松应用它.
| 归档时间: |
|
| 查看次数: |
7673 次 |
| 最近记录: |