Git “什么是”呢;吉特;获取单个提交X如何更改单个文件Y的统一差异的语法?
我正在编写代码以编程方式运行git命令,同时学习git。我是否误读了手册页,或者我想做的事情不可行 下面将告诉我MYFILE在两次提交之间是如何更改的: git diff COMMIT1..COMMIT2--MYFILE 好 但是,假设我只想询问COMMITX是如何更改文件的,而不指定之前的提交。在我的想象中,语法是这样的:Git “什么是”呢;吉特;获取单个提交X如何更改单个文件Y的统一差异的语法?,git,Git,我正在编写代码以编程方式运行git命令,同时学习git。我是否误读了手册页,或者我想做的事情不可行 下面将告诉我MYFILE在两次提交之间是如何更改的: git diff COMMIT1..COMMIT2--MYFILE 好 但是,假设我只想询问COMMITX是如何更改文件的,而不指定之前的提交。在我的想象中,语法是这样的: git diff COMMITX -- MYFILE 或者这个: git diff COMMITX^..COMMITX -- MYFILE 但是上面的命令(对我)不起作
git diff COMMITX -- MYFILE
或者这个:
git diff COMMITX^..COMMITX -- MYFILE
但是上面的命令(对我)不起作用
从某种意义上说,下面的内容可以让我看到COMMITX如何改变了我的文件,但它也包括了我必须去掉的其他内容,比如作者、日期、签入消息。去掉多余的东西很容易,但感觉这是我不应该做的事情。该命令是否存在?我是不是误解了一些简单的事情
EDIT1:我在这里显示了“gitbash”窗口的实际输出。我将“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 show 789e9--dir1/file3.txt
提交789e948bce733dab9605bf8eb51584e3b9a2eba3
作者:科里
日期:2009年10月11日星期日21:54:14-0500
我的味精
diff——git a/dir1/file3.txt b/dir1/file3.txt
索引a351259..cf2bd35 100644
---a/dir1/file3.txt
+++b/dir1/file3.txt
@@-4,5+4,7@@c
ddd
E
F
+新线
+另一条新路线
G
H
Administrator@BIOSTAR/c/temp/mygit(主)
$git diff 789e9--dir1/file3.txt
Administrator@BIOSTAR/c/temp/mygit(主)
git-diff-COMMIT^..COMMIT file
或git-diff-COMMIT^..COMMIT--file
这两种方法在我使用git 1.6.3.3时都非常有效。Jakub Narębski提供的更新:您还可以编写git diff COMMIT^--文件
尝试:
开始时仍然有一个空行(由于降价限制,此处未显示),但是补丁
会很高兴地忽略这一点(实际上,它也会忽略默认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;
}
;
这就是说,如果你正在格式化某个地方提交的补丁,不要去掉那些东西。事实上,使用git格式补丁并享受它。第三方修补工具将很乐意忽略这些额外的元数据,对于使用git的项目,
git apply
将使用您提供的提交消息和作者行,使他们可以轻松地应用它。您不必使用类似于git show
的变通方法-您的语法稍微有点偏差git diff
显示两个命名提交之间的差异。另一方面,。
表示“提交范围介于…”。正确的语法是:
git diff COMMITX^ COMMIT -- MYFILE
也就是说,它确实适用于我的
。
。(我在git.git中测试了git-diff-master^..master--git-add--interactive.perl
)它可能并不总是这样,但它至少在git迁移到索引版本2(在v1.5.1和v1.5.2之间)后起了作用——在此之前进行测试对我来说是一件痛苦的事。我通常只是这样做:
git diff > unified.diff
然后在我最喜欢的unified diff viewer中打开它。git diff显示从当前工作树到提交的差异,不是从提交到其父级的更改如果有一个扩展来允许
git diff^..commit
作为对svn diff-c rev
的模拟,那将是非常可爱的:)虽然我的问题不是其他stackoverflow问题的完全重复,但它是类似的。基于svn类比,我认为git是可预测的,这是不公平的,但如果一个git命令的行为基于其他git命令的行为更加可预测,那就更好了。@bdonlan:这只是默认的操作模式。查看手册页的顶部部分。它可以显示两个任意树(例如提交)之间的差异,一个树和工作树,一个树和索引,或者索引和工作树。@hobbs:有,它被称为git diff COMMIT^代码>(参见git rev parse手册,章节“Specyfying ranges”)。看起来它正在工作。我接受了你的答案,回到“git show”手册页,在我刚刚开悟的状态下,我试着看看我是否能在页面上“看到”你的答案,你的答案完全知道我在寻找什么。仍然很棘手->格式:根本没有格式规范。对于额外的积分,“作者”和“提交人”之间的区别是什么?这里找到了作者/提交人区别的解释:这真是太过分了,除非你真的试图创建一个提交补丁,如果你只是分散一个文件,这是不可能的git diff
设计用于做很多事情,包括这项任务。我知道您已经接受了答案,但我想确保您知道-这完全可以通过git diff
实现。看下面!“git diff COMMIT--FILE”将COMMIT中的文件版本与工作区中的文件版本进行比较。。。这不是你想要的。@Jerromi-请看我对你答案的评论。对我来说不起作用。事实上,“git diff A..B”相当长一段时间以来一直作为“git diff A B”工作,主要是为了将“n”粘贴修订[range]剪切到dif,例如从git fetch输出。“git diff”文档中说,“COMMIT..COMMIT”是“以前的表单”“COMMIT COMMIT”的同义词。当我写“提交^”时,这两种方法都不适用于我。当我实际直接指定之前的提交时,这两种方法都是一样的。我在windows上使用msysgit,git版本1.6.4。回顾您所有的测试用例,看起来diff
工作正常,但可能修订解析不正常-提交^COMMIT在其他上下文中工作吗?@Corey Trager:您使用git的shell是什么?可能是您的shell对^
和/或执行了一些奇怪的操作代码>字符
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;
}
;
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;
}
;
git diff COMMITX^ COMMIT -- MYFILE
git diff > unified.diff